You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Qt构建生成的共享库嵌入soname

为Qt qmake构建的共享库嵌入SONAME的方法

可以实现,只需要在.pro项目文件中调整对应编译链接配置即可,不需要额外修改工具链或者构建流程。

现有配置不生效的原因

你当前的配置里写了CONFIG += plugin,qmake内置的Qt插件构建规则默认会追加no_soname编译标识,这个标识会让链接器跳过SONAME字段的写入,所以直接编译出来的so文件用objdump查不到SONAME条目。

配置步骤

在你现有的.pro文件里追加两行配置即可:

QT -= gui
TEMPLATE = lib
CONFIG += plugin

# 移除插件模式默认禁用SONAME的配置
CONFIG -= no_soname
# 指定链接器的SONAME参数,自动匹配生成的库文件名
QMAKE_LFLAGS_SONAME = -Wl,-soname,

如果你没有手动修改TARGET变量,qmake会默认以项目名作为库名,生成lib<项目名>.so格式的产物,对应的SONAME会自动和库文件名保持一致。
如果需要自定义SONAME(比如带版本号),可以直接通过链接参数指定,例如要把SONAME设为libxyz.so.1,追加一行配置就行:

QMAKE_LFLAGS += -Wl,-soname,libxyz.so.1

验证方法

修改完配置后按以下步骤重新构建:

  • 执行make clean清理之前的旧构建产物,避免旧文件干扰
  • 重新运行qmake,让它解析最新的项目配置
  • 执行make完成全量编译
    编译完成后运行你提到的验证命令:
objdump -p libxyz.so | grep SONAME

就能得到你预期的输出:

SONAME libxyz.so

内容的提问来源于stack exchange,提问作者praveen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 01:01:14