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
相关产品推荐
相关产品推荐

