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

Eclipse CDT and asn1c (undefined reference to ...)

提问人:SBond 提问时间:11/11/2015 最后编辑:SBond 更新时间:11/12/2015 访问量:650

问:

首先:我的英语很差,但我希望你能理解我。 我在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-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;
}

但是,我无法编译此代码。我总是收到这样的错误:对“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(在这种情况下)生成错误。我不知道我能做什么。我需要图书馆吗?...我认为 Linker 需要一些东西......

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

...顺便说一句:我使用gcc编译器(eclipse cdt标准)

问候 SBond(SBond)

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

编辑1:

还行。。。。 为了避免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#

我做错了什么?如何编译此代码?:(

C++ C Linux Eclipse ASN.1

评论

0赞 user58697 11/12/2015
链接器命令表示自动生成的文件未添加到项目中。我不知道Eclipse,但显然仅仅添加路径是不够的。g++ -o "ASN1" ./src/ASN1.oc
0赞 SBond 11/12/2015
...在没有eclipse :(的情况下,我遇到了同样的错误(见编辑 1)
0赞 user58697 11/12/2015
显示非 eclipse 命令行。它是否列出了 asn1 生成的所有文件?.c
0赞 SBond 11/12/2015
是的。所有文件都位于同一文件夹中
0赞 SBond 11/12/2015
问题解决:D所有 .c 文件都必须位于工作区内。...工作区外的路径,产生错误。

答: 暂无答案