linux - 配置 CMake 以遵循符号链接
问题描述
在 Linux 中,考虑有 test.so 文件。它在运行时需要其他 .so(例如 alpha.so、beta.so、charlie.so)文件。它基本上是一个共享库。当我在终端中运行以下命令时:
$ ldd test.so
显示以下输出:
alpha.1.4.so ==> usr/lib/x86-linux-gnu/alpha.1.4.so
beta.1.4.so ==> usr/lib/x86-linux-gnu/beta.1.4.so
charlie.1.4.so ==> usr/lib/x86-linux-gnu/charlie.1.4.so
我想修改用于构建 test.so 的 cmake 以指向符号链接,如下所示
alpha.so ==> usr/lib/x86-linux-gnu/alpha.1.4.so
beta.so ==> usr/lib/x86-linux-gnu/beta.1.4.so
charlie.so ==> usr/lib/x86-linux-gnu/charlie.1.4.so
而不是将其链接到该库的特定版本(alpha.1.4.so
, beta1.4.so
, charlie.1.4.so
)。
如何修改我的 CMake 配置以使 test.so 文件遵循符号链接而不是特定版本?我基本上想让它版本独立。
解决方案
@Tsyvarev 的解决方案适用于 SO_NAME 中不包含版本的动态库。
但在我的情况下,文件的 SO_NAME.so
包含其中的版本号。尽管不建议在 SO_NAME 中使用版本号,但某些库会这样做。我.so
在 linux 中使用 patchelf 命令修改了文件。
patchelf --set-soname dynamic_lib.so dynamic_lib.so.version_number
这将更改库的 SO_NAME。
推荐阅读
- plc - 安装 Siemens TIA 软件时遇到问题
- java - 如何计算日期之间的天数
- php - 跟踪短信中的网址是否已被用户阅读
- c++ - 仅更改函数的特定默认参数
- r - 为什么 R 中的 sankeyNetwork 没有显示不同的颜色?
- python - 为什么我不能用这个网络和约束学习 XOR 函数?
- database - 我需要在同一个子作业 talend 中运行 2 个 twaitforfile
- python - 如何排除物体的镜面反射以避免物体检测中的重复计数
- mysql - 从沙发库到 MySql 的 Drupal cronjob 不工作
- android-studio - Android Generate apk 选项不可见