起初:我没有使用已经编译好的库。
情况是这样的:我在 eclipse CDT 中有一个 C++ 项目,它的文件夹结构如下:
project
somefoldername
src
include
library
src
include
somefoldername/src 和 library/src 被定义为源文件夹,somefoldername/include 以及 library/include 被定义为包含文件夹(在 C/C++ General->Paths and Symbols 下,这也会影响编译器的 -I 选项).
“library”文件夹包含我自己的代码使用的库的源代码(可以在“somefolder”中找到)。好吧,整个项目的编译工作正常,但链接崩溃与库源代码中的一大堆“ undefined reference ”错误。
虽然创建了 *.o 文件,但仍会发生 undefined reference 错误,其中应该可以找到缺少的函数 - 并且之后还会传递给链接器。
我做错了什么?
编辑:更新到当前配置和解决问题的尝试。
Edit2: 接受的答案对我有所帮助,但最大的问题似乎是“一次链接所有内容”-policy 之后是 eclipse。我去了autoconf并首先构建库,然后再将其链接到主应用程序。尽管它需要更多工作,但它是一种更清洁的方法。
最佳答案
三种可能性:
1) “未定义”符号实际上并不在您的库中
This is unlikely, but you can verify using the "nm" Linux command
2) 您没有在 Eclipse 中正确设置库搜索路径(“dash-big-L”)
link static lib in eclipse cdt
……或者……
3) 也许您使用“C”链接构建库,但您的程序使用的是 C++ 链接(反之亦然)。如果您使用的是“C”(gcc) 编译器,或者有任何“*.c”源文件,那么请确保所有 函数在您的 .h header 中都有原型(prototype),并且所有原型(prototype)都使用适当的“外部“C””:
& http://msdn.microsoft.com/en-us/library/0603949d%28v=vs.80%29.aspx
关于c++ - Eclipse-CDT/C++ : Undefined reference-errors although right . o 文件被创建并传递给链接器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8261485/