python的subprocess.call在mac中找不到dylib。

问题描述 投票:0回答:1

我有一个使用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_PATHDYLD_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。

python macos subprocess intel-mkl
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.