Eclipse CDT和asn1c(未定义的引用...)

时间:2015-11-11 15:48:20

标签: c++ c linux eclipse asn.1

首先:我的英语很差,但我希望你理解我。 我使用Eclipse CDT(C ++)在Linux(Debian)下开发,我的应用程序需要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-usage.pdf)。我创建了一个名为rectangle.asn1的文件,其中包含以下内容:

RectangleModule1 DEFINITIONS ::= BEGIN
   Rectangle ::= SEQUENCE {
   height INTEGER,
   width INTEGER
}
END

在此之后,我使用follow命令在终端编译它:

asn1c rectangle.asn1

好的,它没有警告就可以工作,我得到很多.c和.h文件。现在我在eclipse中创建了一个新的c ++项目,并将路径添加到已编译的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;
}

但是,我无法编译此代码。我总是得到这样的错误:未定义引用&#39; asn_DEF_Rectangle&#39;

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)都以错误结尾(未定义引用&#39; asn_DEF_xxxxxxxxxxxxxx&#39;)。我不知道原因。结构正在工作,我可以用值填充它,但asn_DEF_Rectangle(在这种情况下)生成错误。我不知道我能做什么。我需要一个图书馆吗? ......我认为Linker需要一些东西......

有人提示或想法吗?请... 我不知道如何继续...... :(

...顺便说一下:我使用gcc编译器(eclipse cdt standard)

的问候, SBond

=============================================

编辑1:

确定.... 为了避免Eclipse出现任何问题,我尝试了另一种方式:

- &GT;我打开这个网站:http://lionet.info/asn1c/asn1c.cgi(在线asn1发电机)

- &GT;然后我用我的示例ASN.1模块提供它:

RectangleModule1 DEFINITIONS ::= BEGIN
   Rectangle ::= SEQUENCE {
   height INTEGER,
   width INTEGER
}
END

- &GT;我按下&#34;继续进行ASN.1编译&#34;按钮并下载压缩文件&#34;获取已编译的C源(71 Kb .tgz)&#34;

- &GT;我在一个单独的文件夹中提取所有文件:/ root / ASN1_test

- &GT;我用以下代码创建了一个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;
}

- &GT;现在我想用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#

我错了什么?我怎么能编译这段代码? :(

0 个答案:

没有答案