如何在调试模式和发布模式下链接一个动态库和一个可执行文件
CMake, How I can link a dynamic library with an executable in debug mode and release mode?
我正在学习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
我该如何解决这个问题?
我应该创建一个静态库(共享库的一部分)并将可执行文件与它链接吗?
欢呼
我找到的解决方案:对象库
欢呼
相关文章:
- 具有多个继承共享一个资源的对象 - 寻找良好的设计模式
- 对于存储另一个类所需信息的类,例如其构造,是否有设计模式?
- 将终端设置为原始模式:仅在按下下一个键后显示字符
- 为什么这些 CRTP 模式中只有一个可以编译?
- 如何在另一个线程中关闭 MFC 模式对话框并获取对话框返回值?
- 无法在硬件模式下创建 SGX 安全区 - "invalid launch token"即使文档将无效的启动令牌指定为第一个
- QlineEdit:显示一个处理过的文本,而不是输入的文本,而是保留它(自定义回声模式)
- 为什么装饰器模式实现需要一个具有核心类的公共抽象超类
- 为什么CRTP(奇怪的递归模板模式)试图选择另一个私有基类的另一个同名函数
- 为什么将好奇模板模式的基类直接转换为另一个基类是错误的?
- 如何创建一个新过程,而没有从管理模式运行的MFC应用程序中的管理特权
- 在数组中查找一个或多个模式
- 正则表达式匹配是否保证始终只关注最后一个模式?C++
- 在匹配另一个模式的字符串中找到最短子字符串的开始和结尾索引
- 下一个最大的整数,有一些中间位与模式匹配?
- 获取二进制文件的所有可能变体 - 给定一个模式
- 两个附带的类层次结构-一个好的设计模式
- 模板化的使用是否为具有自定义键的unordered_map/set创建了一个良好的模式
- 在找到模式后检索上一个和下一个模式
- ReadProcessMemory找到一个模式粒度