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

CMake中如何像链接curl/ssl一样链接自定义共享库mylib.so?

解决链接器找不到libmylib的问题

问题根源

LD_LIBRARY_PATH是程序运行阶段用来查找共享库的环境变量,链接器ld在编译链接阶段不会读取这个变量,所以你设置它无法解决链接时的库查找问题,必须明确告诉链接器你的库所在路径。

具体解决方法

以下是几种可行方案,按推荐度排序:

方案1:在CMake命令中添加库搜索路径(最规范)

修改你的build.sh,在CMake参数中加入库路径指定:

cmake -S . -B $BUILD_DIR_PREFIX$BUILD_TYPE \
-DCMAKE_C_COMPILER=$C_COMPILER \
-DCMAKE_CXX_COMPILER=$CXX_COMPILER \
-DCMAKE_BUILD_TYPE=$BUILD_TYPE \
-GNinja \
-DCMAKE_LIBRARY_PATH=/home/sama \  # 新增:告诉CMake库的搜索路径
-DCMAKE_CXX_STANDARD_LIBRARIES="-lcurl -lssl -lmylib" \
 $SANITIZER \
${CMAKE_PARAMS[@]}

或者直接在链接参数里指定路径(更直接):

-DCMAKE_CXX_STANDARD_LIBRARIES="-L/home/sama -lcurl -lssl -lmylib" \

方案2:通过环境变量传递链接路径

在执行build.sh前,设置链接器的搜索路径环境变量:

export LDFLAGS="-L/home/sama"

然后在build.sh的CMake参数中加入:

-DCMAKE_EXE_LINKER_FLAGS="$LDFLAGS" \

方案3:把库放到系统默认搜索路径

如果是长期使用的库,可以将mylib.so复制到/usr/lib或/usr/local/lib,然后执行ldconfig更新系统库缓存,这样链接器会自动找到它。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 18:05:17