提问人:SBond 提问时间:11/11/2015 最后编辑:SBond 更新时间:11/12/2015 访问量:650
Eclipse CDT 和 asn1c(对 ...) 的未定义引用)
Eclipse CDT and asn1c (undefined reference to ...)
问:
首先:我的英语很差,但我希望你能理解我。 我在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#
我做错了什么?如何编译此代码?:(
答: 暂无答案
评论
g++ -o "ASN1" ./src/ASN1.o
c
.c