如何在 CMake 中更改 LD_LIBRARY_PATH?
How can LD_LIBRARY_PATH be changed within CMake?
我有一个不在 $LD_LIBRARY_PATH 中的本地共享库。
我想 运行 我的可执行文件,但由于它在系统文件夹中找不到共享库,它输出 "error while loading shared libraries".
一个可能的解决方法是导出一个包含本地库文件夹的新 LD_LIBRARY_PATH。
如何在 CMake 中自动导出此环境变量?
您可以使用 -rpath
链接器选项设置运行时共享库搜索路径:
SET(CMAKE_EXE_LINKER_FLAGS
"${CMAKE_EXE_LINKER_FLAGS} -Wl,-rpath -Wl,/usr/local/lib")
如果您的共享库未构建在与您的可执行文件相同的 CMake 项目中,您可以像这样使用 CMake rpath 处理:
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
当您 运行 make install
时,CMake 会自动将您的可执行文件的 运行 时间路径设置为您的共享库。
如果您的共享库是在同一个 CMake 项目中构建的,请使用:
set(CMAKE_INSTALL_RPATH "/usr/local/lib")
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
在这种情况下,您必须将自己的共享库安装目录添加到 运行时间路径。
更多信息,您可以阅读CMake rpath handling
当您使用此解决方案时:
SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
记得在您的 CMake 文件中定义目标之前设置 RPATH。所以这条指令必须在调用add_executable()
或add_library()
之前,否则没有效果。
我有一个不在 $LD_LIBRARY_PATH 中的本地共享库。 我想 运行 我的可执行文件,但由于它在系统文件夹中找不到共享库,它输出 "error while loading shared libraries".
一个可能的解决方法是导出一个包含本地库文件夹的新 LD_LIBRARY_PATH。
如何在 CMake 中自动导出此环境变量?
您可以使用 -rpath
链接器选项设置运行时共享库搜索路径:
SET(CMAKE_EXE_LINKER_FLAGS
"${CMAKE_EXE_LINKER_FLAGS} -Wl,-rpath -Wl,/usr/local/lib")
如果您的共享库未构建在与您的可执行文件相同的 CMake 项目中,您可以像这样使用 CMake rpath 处理:
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
当您 运行 make install
时,CMake 会自动将您的可执行文件的 运行 时间路径设置为您的共享库。
如果您的共享库是在同一个 CMake 项目中构建的,请使用:
set(CMAKE_INSTALL_RPATH "/usr/local/lib")
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
在这种情况下,您必须将自己的共享库安装目录添加到 运行时间路径。
更多信息,您可以阅读CMake rpath handling
当您使用此解决方案时:
SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
记得在您的 CMake 文件中定义目标之前设置 RPATH。所以这条指令必须在调用add_executable()
或add_library()
之前,否则没有效果。