CMake:链接共享库

goo*_*ons 5 static shared cmake libraries

我已经做过几次了,但是这次我还是被卡住了。我有一个可执行文件“ myapp”和一个自己的共享库“ mylib”。在我的cmakelist中,我有以下内容:

ADD_LIBRARY(mylib SHARED ${SOURCES_LIB})
INSTALL(TARGETS mylib DESTINATION .)
ADD_EXECUTABLE(myapp ${SOURCES_APP})
TARGET_LINK_LIBRARIES(myapp ${QT_LIBRARIES} mylib)
INSTALL(TARGETS myapp DESTINATION .)
Run Code Online (Sandbox Code Playgroud)

一切都能正确编译和链接,但是当我启动myapp时,出现以下错误:

error while loading shared libraries: libmylib.so: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)

lib和可执行文件位于安装目录中。当我通过将以上cmakelists的第一行更改为以下内容来使我的库成为静态库时:

ADD_LIBRARY(mylib STATIC ${SOURCES_LIB})
Run Code Online (Sandbox Code Playgroud)

那么一切都会100%有效。

有人知道我在做什么错吗?

小智 6

在安装库和可执行文件的过程中,从可执行文件中剥离了用于查找库的运行时路径。因此,您的库必须驻留在运行时库搜索路径中。例如,在Linux下,启动可执行文件时,尝试将LD_LIBRARY_PATH设置为包含已安装库的目录。

  • 在cmake中,您可以设置:SET(CMAKE_INSTALL_RPATH“ $ {CMAKE_INSTALL_PREFIX} / libfolder”)其中libfolder是共享库的安装目录。这仅适用于Unix系统。我也会尝试为Windows找到一些东西。 (10认同)