我有一个使用Intel-mkl的C++程序,编译后的代码(假设可执行文件是 a.out
),我可以在终端运行
/Users/hshi/test/a.out
运作得非常好。
如果我使用python subprocess.call
运转 a.out
,python代码看起来像
import subprocess
subprocess.call( "/Users/hshi/test/a.out", shell=True)
然后运行python脚本,它有一个错误。
dyld: Library not loaded: @rpath/libmkl_intel_lp64.dylib
Referenced from: /Users/hshi/test/a.out
Reason: image not found
我认为python脚本的工作原理应该和我运行 /Users/hshi/test/a.out
在终端上。
我使用的是MacBookPro。我已经将Intel-mkl路径添加到 DYLD_LIBRARY_PATH
和 DYLD_FALLBACK_LIBRARY_PATH
,使用
export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/Users/hshi/Library/Intel/mkl/lib
export DYLD_FALLBACK_LIBRARY_PATH=$DYLD_FALLBACK_LIBRARY_PATH:/Users/hshi/Library/Intel/mkl/lib
在 ~/.profile
.
该 a.out
是由cmake编译的,编译标志看起来就像
/Users/hshi/Library/openmpi-intel/bin/mpicxx -Wall -O3 -DNDEBUG
-Wl,-search_paths_first -Wl,-headerpad_max_install_names CMakeFiles/complexDoubleErrorAnalysis.dir/complexDoubleErrorAnalysis.cpp.o -o a.out
-Wl,-rpath, /Users/hshi/Library/Intel/mkl/lib/libmkl_intel_lp64.dylib
/Users/hshi/Library/Intel/mkl/lib/libmkl_core.dylib
/Users/hshi/Library/Intel/mkl/lib/libmkl_sequential.dylib -lm -ldl -lpthread
我感觉编译代码没问题,问题可能是Python没有加载我的环境路径。谢谢您的帮助。
=========================
如果我建立符号链接到usrlocallib,问题就可以解决了。
我还在网上找到一些有趣的信息 https:/github.comoraclenode-oracledbissues231。
In the latest release off OS-X using the DYLD_LIBRARY_PATH is not
possible unless System Integrity Protection (SIP) is disabled.
Meaning that setting the DYLD_LIBRARY_PATH will have no effects on
spawned sub shells and therefore using the node client is no longer
possible unless one turns off (SIP) as explained here."
我想python的subprocess.call无法加载DYLD_LIBRARY_PATH。