【问题标题】:Cant use shared libraries in Qt project无法在 Qt 项目中使用共享库
【发布时间】:2013-04-10 21:16:34
【问题描述】:

我在 Qt creator 中创建了一个 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 旁边,因为当路径错误时,我在尝试构建项目时收到没有此类文件或目录错误。 有人可以解释一下我在这里缺少什么吗?

感谢您的宝贵时间。

【问题讨论】:

  • 添加DEPENDS += "/home/peter/Workspace/build-Libtester-Desktop-Release/" 有用吗?它将使 Qt 创建者在该位置搜索运行时库。

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


【解决方案1】:

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

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

【讨论】:

  • 它在命令行下工作,但我们如何在 Qt 中指定DYLD_LIBRARY_PATH
【解决方案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 了解更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-18
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-06
    相关资源
    最近更新 更多