使用Intel MKL编译C代码报错:ld: unknown option: --no-as-needed
问题原因与解决方案
这个错误的根源很明确:Mac平台默认使用的是苹果自家的ld64链接器,它不支持--no-as-needed这个GNU ld专属的命令行选项。
虽然你用的是Homebrew安装的GCC,但在Mac环境下,GCC默认会调用系统自带的苹果链接器,而非GNU ld。--no-as-needed是用来控制GNU ld是否自动剔除未被直接引用的库文件,而苹果的链接器根本没有这个参数,自然会报错。
修复步骤
直接去掉编译命令里的-Wl,--no-as-needed选项即可,修改后的链接命令如下:
gcc-9 -L${MKLROOT}/lib -lmkl_intel_lp64 -lmkl_gnu_thread -lmkl_core -lgomp -lpthread -lm -ldl template.o -o template
苹果的链接器默认行为就类似GNU ld关闭--as-needed的状态,会链接你指定的所有库,所以不需要额外加这个选项。
额外提示
如果运行可执行文件时出现找不到MKL库的情况,可以在链接命令中添加运行时路径参数,确保系统能找到库文件:
gcc-9 -L${MKLROOT}/lib -Wl,-rpath,${MKLROOT}/lib -lmkl_intel_lp64 -lmkl_gnu_thread -lmkl_core -lgomp -lpthread -lm -ldl template.o -o template
内容的提问来源于stack exchange,提问作者Cesare
相关产品推荐
相关产品推荐

