2011-07-05 34 views
2

我正在编写一个取决于Poco c++ library的软件。我可以设法在Ubuntu和Windows上编译库,但只能静态编译。这很好,因为我想静态使用它。然而,当我尝试编译所依赖的库程序,我得到类似这样(自由翻译)错误:将静态库链接到gnu g ++,没有这样的文件或目录

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

然而,当我也明确告诉编译器到哪里寻找库的头与-I开关文件我碰到下面的错误,而不是(但也许20-30类似的路线):

Undefined reference to (pthread_mutex...) 

我已经尝试了很多不同的组合,无论是直接与G ++,利用makefile文件。 我应该包括库的头文件的路径,或者我不知道如何成功地编译库正确? 如果我应该包含路径,我该如何摆脱“未定义的引用”错误?

我很新的C++编程,所以忍受着我。 谢谢,罗伯特

+0

也许尝试加入'-lpthread'。看起来像在链接阶段缺少该库。 –

+0

谢谢!它的工作,编译一个简单的测试。但是,这是正确的方式来链接和包含标题? – roggan87

+0

不知道你的意思是“正确的方式”,但是,一般来说,你必须指定包含所有标题的包含目录,如'',并且必须链接到所有正在使用的库(或您正在使用的其他库正在递归使用)。 –

回答

1

这是非常常见的错误,我也是,每时每刻忍受它。

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

“.a”和“as .so/.dll”有点俚语;有点像当你说“我需要新的桥石”或“我失去了我的甜心”时。我会建议静态库或只是图书馆;) –

+0

我需要记住这一点,谢谢:) – inestical

+0

谢谢,这真的让我走了:) – roggan87

0

试试-I选项。在具有RegularExpression.h作为扶养对象,尝试包括包含像这样上面的头文件的目录:

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

相关问题