似乎这个问题在很久以前就被提出过,但似乎没有一个解决方案适用于我的案例.
我在CMake / Linux环境中,必须在构建步骤(特别是protoc)中运行可执行二进制文件.
这个二进制文件需要一个库,但它没有安装(也不能)在/ usr这样的标准目录中,因此无法找到库.
不幸的是,我无法操纵protoc调用,因为它嵌入在第三方脚本中.
我现在可以在每次制作之前设置LD_LIBRARY_PATH或在系统范围内设置它,但这非常不方便,特别是涉及构建发生的IDE或具有连续构建环境的分布式构建方案.
我尝试通过设置LD_LIBRARY_PATH
set(ENV{LD_LIBRARY_PATH} "/path/to/library/dir")
但这似乎在构建步骤中没有任何效果.
所以我的问题是:我可以在构建过程中使用的CMake中设置库搜索路径吗?
解决方法:
试试这个
SET(ENV{LD_LIBRARY_PATH} "/path/to/library/dir:$ENV{LD_LIBRARY_PATH}")
我还使用这个脏技巧来临时更改一些环境变量:
LD_LIBRARY_PATH="/path/to/library/dir:$LD_LIBRARY_PATH" cmake ...
执行此行后,当前shell中的LD_LIBRARY_PATH未更改.
另外,我发现在调用cmake之前更改LD_LIBRARY_PATH并不好:
export LD_LIBRARY_PATH = …
它不会在系统范围内进行任何更改,但它将用于当前的shell,当前的构建过程. CI构建也是如此.您可以保存变量并在cmake调用后恢复它:
MY_LD=$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=...
cmake...
export LD_LIBRARY_PATH=$MY_LD
标签:linux,linker,cmake,executable
来源: https://codeday.me/bug/20190711/1431660.html