2016-08-15 32 views
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我解决这个问题?

我应该创建一个静态库(共享库的一部分)并将其链接到可执行文件吗?

干杯

+0

你从别的地方运行在系统路径上的可执行'ldd'比构建路径? –

+0

备注:不应要求您为Debug和Release模式之间的切换编写其他选项。让用户在第一次调用CMake时或者在构建过程中直接指定'CMAKE_BUILD_TYPE'''cmake --build。 --target my_executable --config Debug | Shared' –

+0

@torbjörn我想用CPack生成一个debian包。当我在其他系统上安装软件包并运行可执行文件时,由于无法找到共享库而失败。我必须修改** LD_LIBRARY_PATH **变量来运行可执行文件。 –

回答

相关问题