不能在Qt项目中使用共享库

时间:2013-04-17 22:33:47

标签: qt shared-libraries qt-creator ld dynamic-linking

我在Qt创建者中创建了一个C ++库项目。构建项目后,我有libMylib.so,.so.1,.so.1.0,.so.1.0.0,Makefile和mylib.o文件。我将库头添加到我的其他项目中,并添加了我的.pro文件的路径,如下所示:

LIBS += "/home/peter/Workspace/build-Libtester-Desktop-Release/libMyLib.so"

构建应用程序时,我没有得到这样的文件错误,但在运行它时我得到了这个:

/home/peter/Workspace/build-Libtester-Desktop-Debug/Libtester: error while loading shared libraries: libMyLib.so.1: cannot open shared object file: No such file or directory

我无法理解,因为它正好位于.so旁边,它似乎找到了,因为当路径错误时,我在尝试构建项目时得到一个没有这样的文件或目录错误。 有人可以解释我在这里缺少的东西吗?

感谢您的时间。

2 个答案:

答案 0 :(得分:3)

幸运的是,你的问题与Qt和Qt Creator无关。该错误简单归结为LD如何在Unix OS系列上搜索共享库以进行动态链接。

今天,我已经回答了类似的问题,have a look。有关Mac OS X的问题被提出过。但是,Linux和Mac OS X在您的问题中是相同的。我在底部为Linux提供了额外的解释,所以要注意它。 “它就在.so 旁边 - 如果你做出这个假设,你似乎有Windows背景,但是对于Unix OS系列来说这是错误的(如答案中所述) 。如果您还有其他问题,请询问。

答案 1 :(得分:2)

您正在错误地添加库。你在做:

LIBS += "/home/peter/Workspace/build-Libtester-Desktop-Release/libMyLib.so"

而不是:

LIBS += -L"/home/peter/Workspace/build-Libtester-Desktop-Release" -lMyLib

第一个版本适用于Windows,但不适用于linux。

基本上,你创建了一个名为“libMyLib.so”的库,然后指定其文件夹的路径,前面加上“-L”,然后在末尾做“-lMyLib”,注意它是不是“-llibMyLib”,而只是“-lMyLib”,尽管.so名称是“libMyLib”。

请点击此处:https://wiki.qt.io/How_to_create_a_library_with_Qt_and_use_it_in_an_application获取更多信息。