0
我正在学习CMake。CMake,如何在调试模式和发布模式下将动态库与可执行文件链接起来?
我的项目由一个可执行文件和一个共享库组成。共享库可以被第三方项目使用。可执行文件和共享库将安装在系统中。
我有两种开发模式:调试和发布。简单地说,我定义了一个选项,并根据选项的值为变量设置一个值为CMAKE_BUILD_TYPE变量。
我与共享库链接可执行如下:
ADD_EXECUTABLE(my_executable ${MY_EXECUTABLE_SOURCE_FILES})
TARGET_LINK_LIBRARIES(
my_executable
${MY_EXECUTABLE_DEPENDENCIES_LIBRARIES}
my_shared_library #target generated with ADD_LIBRARY
)
我的问题是,当我在释放模式联系起来,我跑了LDD工具:
~/my-project/build$ sudo make install
~/my-project/build$ ldd -d /usr/local/bin/my_executable
my_shared_library.so.0.1 => /path/my-project/output/lib/my_shared_library.so.0.1 (0x00007f1361adb000)
------------------------
local path
当应显示:
my_shared_library.so.0.1 => /usr/local/lib/my_shared_library.so.0.1 (0x00007f1361adb000)
-----------
install path
c我解决这个问题?
我应该创建一个静态库(共享库的一部分)并将其链接到可执行文件吗?
干杯
你从别的地方运行在系统路径上的可执行'ldd'比构建路径? –
备注:不应要求您为Debug和Release模式之间的切换编写其他选项。让用户在第一次调用CMake时或者在构建过程中直接指定'CMAKE_BUILD_TYPE'''cmake --build。 --target my_executable --config Debug | Shared' –
@torbjörn我想用CPack生成一个debian包。当我在其他系统上安装软件包并运行可执行文件时,由于无法找到共享库而失败。我必须修改** LD_LIBRARY_PATH **变量来运行可执行文件。 –