mkl in XCode,主要bug:dyld: lazy symbol binding failed&dyld: Library not loaded:

先设置环境变量:

-bash下执行.csh出错。

echo $SHELL   查看当前shell

cat /etc/shells   查看已安装所有shell

2.更改shell设置:

终端命令:chsh -s /bin/csh应该就可以了

chsh 可以看详细shell?

携带参数安装,env查看环境变量

2.1bash下直接运行那个.sh就可以了

3.-大写i等 include lib内容,-lmkl等为依赖包,-lapacke_zheev_row.c为编译对象,-o后面为编译结果,直接命令行执行

gcc  -I${MKLROOT}/include  -L${MKLROOT}/lib/  -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -lmkl_lapack95_lp64 -liomp5 -lpthread -ldl -lm  lapacke_zheev_row.c -o lapacke_zheev_row


gcc编译例子,lapacke_zheev_row 查看结果

4.IDE添加 编译、链接库include lib

添加依赖环境-lmkl

5.这到底是什么原因?

dyld: Library not loaded: @rpath/libmkl_intel_lp64.dylib
  Referenced from: /XXX/Library/Developer/Xcode/DerivedData/test-guxuwcyljhmekfbbrknhdnynekqq/Build/Products/Debug/test
  Reason: image not found

设置了环境变量,也运行了他的脚本,还是不行……重新添加了动态库静态库,但是出现了6。

OK,正在Q 8解决了。

6.已尝试更换IDE不能解决,主要问题应该是添加动态链接和静态链接的问题,但是并不能清楚的定位问题的位置,也没有什么解决思路,暂且搁置

dyld: lazy symbol binding failed: can't resolve symbol _LAPACKE_zheev in XXX because dependent dylib #1 could not be loaded
dyld: can't resolve symbol _LAPACKE_zheev in XXX because dependent dylib #1 could not be loaded

7.IDE更换VSCode是失败了,因为complex.h居然不能识别!

添加系统库后,还有更绝的,VS对于complex double定义不能识别,double complex却可以,我震惊的回到Xcode,尼玛complex double和double complex居然都能识别,还是一样的!我……这complex double和double complex区别是啥!!

8.对于问题6,这是动态库找不到了,Intel也认为这是个bug,我个人找到个笨办法,我更换了eclipse来开发C,是可以通过编译的,不过运行run或者debug会出现5,不过我们可以在命令行里面运行……就是先用IDE编译,然后命令行运行,这是可以的……

9.我改进了8,我们可以再进一步,他的@rpath找不到对应动态库的话,我们就指定绝对路径就行,这样就可以在IDE里面运行了。

$

install_name_tool -change @rpath/libmkl_core.dylib /opt/intel/compilers_and_libraries_2019.0.117/mac/mkl/lib/libmkl_core.dylib ./Spotfi_V2.1

install_name_tool -change @rpath/libiomp5.dylib /opt/intel/compilers_and_libraries_2019.0.117/mac/compiler/lib/libiomp5.dylib ./Spotfi_V2.1

install_name_tool -change @rpath/libmkl_intel_thread.dylib /opt/intel/compilers_and_libraries_2019.0.117/mac/mkl/lib/libmkl_intel_thread.dylib ./Spotfi_V2.1

install_name_tool -change @rpath/libmkl_intel_lp64.dylib /opt/intel/compilers_and_libraries_2019.0.117/mac/mkl/lib/libmkl_intel_lp64.dylib ./Spotfi_V2.1

install_name_tool -change @rpath/libmkl_intel_thread.dylib /opt/intel/compilers_and_libraries_2019.0.117/mac/mkl/lib/libmkl_intel_thread.dylib ./Spotfi_V2.1

 

10.这是eclipse可以了,毫无疑问9依然很麻烦,因为我涉及很多库的话就会要改很多次

所以我们可以直接修改rpath$ install_name_tool -add_rpath @loader_path/../frameworks bar.app/Contents/MacOS/bar 
它就可以修改依赖的动态库的加载路径(这条add_rpath我没有亲测,回Xcode了用不上了,如果用eclipse可以深入了解下install_name_tool来修改rpath.)

11.所以我看看,回到我们的XCode

说明运行时没有找到相应的库,那么在Runpath Search Paths中设置所需要的库的路基即可,如下图:
这里写图片描述

 

Framework Search Paths: 这里通常填framework的路径;

Library Search Paths: 这里通常填.a文件的路径;

Header Search Paths: 头文件搜索路径设置。

然而我们遇到的就比较逗了,需要额外设置Runpath Search Paths就行了

 

总结:

通常添加依赖库的时候到TARGETS下的Library Search Paths添加lib路径

User Header Search Paths下添加include路径

如果出现:

dyld: lazy symbol binding failed: can't resolve symbol _FUHAO in /XXX/XX because dependent dylib #1 could not be loaded
dyld: can't resolve symbol _LAPACKE_zheev in //SpotFi_v2-foapuqhoeswcytbeumyedsdabfde/Build/Products/Debug/SpotFi_v2 because dependent dylib #1 could not be loaded

就需要额外添加lib路径到PROJECT下的Runpath Search Paths

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值