如何使用 Eclipse link Intel MKL,--start-group --end-group

How to link Intel MKL using Eclipse, --start-group --end-group

我在使用 Eclipse CDT 对抗英特尔 MKL 时遇到问题 link。根据我的具体要求,Intel's Link Line Advisor Tool 的建议是使用 Link 行:

-Wl,--start-group ${MKLROOT}/lib/intel64/libmkl_intel_lp64.a ${MKLROOT}/lib/intel64/libmkl_sequential.a ${MKLROOT}/lib/intel64/libmkl_core.a -Wl,--end-group -lpthread -lm -ldl    

我需要的更具可读性的形式:

--start-group -lmkl_intel_lp64 -lmkl_sequential -lmkl_core --end-group

问题是 --start-group --end-group 语法不是(据我所知)Eclipse 中的一个选项。 MKL 库有很多循环依赖;这种语法是必要的,以避免必须重复 link 库。没有这个语法,我有这个可怕的库列表:

-lmkl_core -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -lmkl_sequential -lmkl_core -lmkl_sequential -lmkl_core -lmkl_sequential    

所以问题是如何配置 Eclipse CDT 到 link 英特尔 MKL 库,使用 --start-group 语法来防止循环引用?

我在搜索 Whosebug 时解决了我的问题。 This Answer 在 Eclipse CDT 上,--start-group 选项几乎就是解决方案。需要稍作修改;将 $(LIBS) 变量放在组中,而不是 $(USER_OBS).

因此来自:

${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS}

为此:

${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} $(OBJS) $(USER_OBJS) -Wl,--start-group $(LIBS) -Wl,--end-group 

生成有效的 Eclipse 构建。命令行如下所示:

g++ -L"Intel MKL 2019.5.281/linux/lib" -shared -o "myLibrary.so"  ./MyObject.o -Wl,--start-group -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -Wl,--end-group