Прежде всего: мой английский плохой, но я надеюсь, что вы меня понимаете.
Я разрабатываю под Linux (Debian) с Eclipse CDT (C ++), и мне нужен ASN.1 для моего приложения. Я установил asn1c (из http://lionet.info/) и попытался пример в документации, но он всегда терпит неудачу.
Я сделал следующее:
Я извлек и установил asn1c с помощью следующих команд в терминале (как root):
tar xfz asn1c-0.9.27.tar.gz
cd asn1c-0.9.27
./configure
make
make install
После этого я мог использовать asn1c в терминале. Теперь я попробовал пример в документации (asn1c-creation.pdf). Я создал файл с именем rectangle.asn1 со следующим содержимым:
RectangleModule1 DEFINITIONS ::= BEGIN
Rectangle ::= SEQUENCE {
height INTEGER,
width INTEGER
}
END
После этого я скомпилировал его в терминале с помощью команды follow:
asn1c rectangle.asn1
Хорошо, это работает без предупреждения, и я получаю много файлов .c и .h. Теперь я создал новый проект c ++ в eclipse и добавил путь к скомпилированным файлам asn1. Затем я написал файл main.cpp со следующим кодом:
#include <Rectangle.h>
int main()
{
Rectangle_t *rect = NULL;
asn_DEF_Rectangle.free_struct(&asn_DEF_Rectangle, rect, 0);
/* more code …some time */
return 0;
}
Однако я не могу скомпилировать этот код. Я всегда получаю сообщение об ошибке: неопределенная ссылка на «asn_DEF_Rectangle»
Выход Eclipse:
make all
Building file: ../src/ASN1.cpp
Invoking: GCC C++ Compiler
g++ -I/root/Dokumente -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/ASN1.d" -MT"src/ASN1.d" -o "src/ASN1.o" "../src/ASN1.cpp"Finished building: ../src/ASN1.cpp
Building target: ASN1
Invoking: GCC C++ Linker
g++ -o "ASN1" ./src/ASN1.o
makefile:45: recipe for target 'ASN1' failed
./src/ASN1.o: In function `main':
/media/sf_NTS_Daten/Workspace/ASN1/Debug/../src/ASN1.cpp:6: undefined reference to `asn_DEF_Rectangle'
/media/sf_NTS_Daten/Workspace/ASN1/Debug/../src/ASN1.cpp:6: undefined reference to `asn_DEF_Rectangle'
collect2: error: ld returned 1 exit status
make: *** [ASN1] Error 1
Все примеры, которые я нашел (документация и lionet.info), заканчиваются ошибкой (неопределенная ссылка на «asn_DEF_xxxxxxxxxxxxxx»). Я не знаю причину. Структуры работают, и я могу заполнить их значениями, но asn_DEF_Rectangle (в данном случае) генерирует ошибку. Я понятия не имею, что я могу сделать. Мне нужна библиотека? … думаю линкеру нужно что-то …
У кого-нибудь есть советы или идеи? пожалуйста…
Я не знаю, как продолжить …. 🙁
…кстати: я использую компилятор gcc (стандарт eclipse cdt)
С уважением,
SBond
=============================================
Хорошо….
чтобы избежать каких-либо проблем с Eclipse, я пробую другой способ:
-> Я открываю этот сайт: http://lionet.info/asn1c/asn1c.cgi (онлайн генератор asn1)
-> Затем я добавляю его в мой пример модуля ASN.1:
RectangleModule1 DEFINITIONS ::= BEGIN
Rectangle ::= SEQUENCE {
height INTEGER,
width INTEGER
}
END
-> Я нажимаю кнопку «Приступить к компиляции ASN.1» и загружаю сжатый файл «Получать скомпилированные исходники C (71 Kb .tgz)»
-> Я распаковываю все файлы в отдельную папку: / root / ASN1_test
-> Я создаю main.cpp (в / root / ASN1_test) со следующим кодом:
#include <Rectangle.h>
int main()
{
Rectangle_t *rect = NULL;
asn_DEF_Rectangle.free_struct(&asn_DEF_Rectangle, rect, 0);
/* more code …some time */
return 0;
}
-> Теперь я хочу скомпилировать это с g ++ и попробовать это:
g++ -I/root/ASN1_test -o MyProgram main.cpp
но…
/tmp/ccwF42ix.o: In function `main':
main.cpp:(.text+0x19): undefined reference to `asn_DEF_Rectangle'
main.cpp:(.text+0x26): undefined reference to `asn_DEF_Rectangle'
collect2: error: ld returned 1 exit status
root@debian:~/ASN1_test#
Что я не прав? Как я могу скомпилировать этот код? 🙁
Задача ещё не решена.
Других решений пока нет …