【发布时间】:2014-09-07 03:52:56
【问题描述】:
我制作了一个带有两个子项目的 Qt 项目。一个是静态库,另一个是使用静态库的GUI应用。
由于这是一个子项目项目,我已经指定了两个部分的构建顺序。从项目树中的静态库开始,然后是项目树中的应用程序。使用 CONFIG+=ordered 选项完成。
我还需要第三个外部静态库。它位于我系统上的一个单独目录中。
因此,对于这两个子项目,我将以下内容添加到两个 .pro 文件中:
INCLUDEPATH += /local/yrq12edu/local/bpp/dev/include
LIBS += -L/local/yrq12edu/local/bpp/dev/lib -lbpp-seq -lbpp-core
然后对于应用程序子项目,我使用添加库向导来链接项目树中的库。
我编写了一个非常基本的 GUI,带有几个标签和一个文件菜单,以测试一切是否正常。
点击绿色运行按钮,应用成功运行,测试功能运行良好。
但是,当我来到构建文件夹时,双击可执行文件,没有任何反应。我打开终端并尝试再次启动它:
error while loading shared libraries: libbpp-seq.so.9: cannot open shared object file: No such file or directory
我无法理解,因为 .so 是共享对象,我原以为静态文件是 .a,我也很困惑为什么在 Qt Creator 中使用绿色箭头“运行”运行会起作用并运行程序,但从可执行文件中尝试会导致上述错误。我还有什么需要做的吗?
编辑:
第 3 方库说明如何使用 g++ 命令动态或静态链接。
动态联动:
g++ biohello.cpp \
-o biohello \
-I$bpp_dir/include \
-L$bpp_dir/lib \
-lbpp-seq -lbpp-core
静态联动:
g++ biohello.cpp \
-o biohello \
--static \
-I$bpp_dir/include \
-L$bpp_dir/lib \
-lbpp-popgen -lbpp-phyl -lbpp-seq -lbpp-core
strip biohello
我已经能够使用第二个 g++ 命令静态链接命令行程序的库。我想实现相同的目标,但使用 gui 应用程序的 Qt Creator。
更新:
删除使用的两行:
INCLUDEPATH += /local/yrq12edu/local/bpp/dev/include
LIBS += -L/local/yrq12edu/local/bpp/dev/lib -lbpp-seq -lbpp-core
从两个 .pro 文件并尝试使用添加库向导在外部添加 .a 文件,从而添加:
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../local/bpp/dev/lib/release/ -lbpp-seq
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../local/bpp/dev/lib/debug/ -lbpp-seq
else:unix: LIBS += -L$$PWD/../../local/bpp/dev/lib/ -lbpp-seq
INCLUDEPATH += $$PWD/../../local/bpp/dev/include
DEPENDPATH += $$PWD/../../local/bpp/dev/include
win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$PWD/../../local/bpp/dev/lib/release/libbpp-seq.a
else:win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$PWD/../../local/bpp/dev/lib/debug/libbpp-seq.a
else:win32:!win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$PWD/../../local/bpp/dev/lib/release/bpp-seq.lib
else:win32:!win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$PWD/../../local/bpp/dev/lib/debug/bpp-seq.lib
else:unix: PRE_TARGETDEPS += $$PWD/../../local/bpp/dev/lib/libbpp-seq.a
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../local/bpp/dev/lib/release/ -lbpp-core
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../local/bpp/dev/lib/debug/ -lbpp-core
else:unix: LIBS += -L$$PWD/../../local/bpp/dev/lib/ -lbpp-core
INCLUDEPATH += $$PWD/../../local/bpp/dev/include
DEPENDPATH += $$PWD/../../local/bpp/dev/include
win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$PWD/../../local/bpp/dev/lib/release/libbpp-core.a
else:win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$PWD/../../local/bpp/dev/lib/debug/libbpp-core.a
else:win32:!win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$PWD/../../local/bpp/dev/lib/release/bpp-core.lib
else:win32:!win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$PWD/../../local/bpp/dev/lib/debug/bpp-core.lib
else:unix: PRE_TARGETDEPS += $$PWD/../../local/bpp/dev/lib/libbpp-core.a
到 .pro 文件,然后点击 Run 结果在 error while loading shared libraries: libbpp-seq.so.9: cannot open shared object file: No such file or directory
我没有尝试包含 .so 文件,仅包含带有添加库向导的 .a 文件:S
【问题讨论】:
-
尝试同时添加
PRE_TARGETDEPS += /local/yrq12edu/local/bpp/dev/lib/libbpp-seq.a和PRE_TARGETDEPS += /local/yrq12edu/local/bpp/dev/lib/libbpp-core.a
标签: c++ qt static-libraries