将静态库与gnu g ++链接,没有这样的文件或目录

时间:2011-07-05 10:54:25

标签: c++ static linker gnu

我正在编写一个取决于Poco c++ library的软件。我可以设法在Ubuntu和Windows上编译库,但只能作为静态库。这很好,因为我想静态地使用它。但是,当我尝试编译依赖于库的程序时,我得到类似于此的错误(自由翻译):

Poco/RegularExpression.h: No such file or directory.

但是,当我还明确告诉编译器在哪里查找带有-I开关的库头文件时,我得到了以下错误(但可能有20-30条相似的行):

Undefined reference to (pthread_mutex...)

我尝试过很多不同的组合,既可以直接使用g ++,也可以使用makefile。 我应该包括库的头文件的路径,还是我不知道怎么没有成功编译库? 如果我应该包含路径,我怎么能摆脱“未定义的引用”错误?

我对c ++编程很新,所以请耐心等待。 谢谢,罗伯特

2 个答案:

答案 0 :(得分:1)

这是非常常见的错误,我也经常遭受它的困扰。

  • 您是否将.a包含在项目中?
  • 如何包含标题?与<>要么 ””?
    • 如果是后者,请确保文件位于包含文件夹中。
    • 如果是第一个,请确保您已添加文件的路径,或者它们位于g ++的全局包含文件夹中
  • 库是否应编译为.so / .dll?
    • 通常,如果库是动态的,静态库只指向它。
  • 您是否包含了Poco本身所需的依赖项?就像-lpthread一样,我认为你错过了。

答案 1 :(得分:1)

尝试使用-I选项。在具有RegularExpression.h作为依赖项的目标中,尝试包含包含上述头文件的目录,如下所示:

g++ -I/home/.../Poco <other options>