先设置环境变量:
-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