如何让icpc告知链接过程中使用的具体文件?
解决方案
嘿,这几个方法应该能满足你的需求,不管链接成功与否都能拿到文件信息:
1. 用Intel编译器专属的-t选项
icpc自带的-t选项会输出链接过程中涉及的所有文件路径,包括被扫描和实际链接的.o、.a、.so文件。直接把它加到你的命令里就行:
icpc -t -o my_executable f1.o /path/to/f2.a -lfoo -lbar
这个选项会输出一些额外的日志,如果你只想看文件路径,可以配合grep过滤出目标类型:
icpc -t -o my_executable f1.o /path/to/f2.a -lfoo -lbar 2>&1 | grep -E '\.(o|a|so(\.[0-9]+)?)$'
2. 传递选项给底层链接器
icpc本质上会调用系统的链接器(比如GNU ld或LLVM lld),你可以用-Wl,前缀把链接器的详细输出选项传过去:
- GNU链接器(ld):用
--verbose选项,会输出非常详细的链接过程,包括每个库文件的查找结果,其中attempt to open xxx succeeded对应的就是实际被用到的文件:icpc -Wl,--verbose -o my_executable f1.o /path/to/f2.a -lfoo -lbar - LLVM链接器(lld):用
-t或--verbose选项,同样会列出所有被处理的文件路径:icpc -Wl,-t -o my_executable f1.o /path/to/f2.a -lfoo -lbar
3. 单独验证库文件路径(针对-lxxx参数)
如果你只是想确认某个-lxxx对应的实际库文件位置,可以用-print-file-name选项,一次查一个库:
# 查动态库 icpc -print-file-name=libfoo.so # 查静态库 icpc -print-file-name=libfoo.a
这个命令会直接输出对应库的完整路径,完全不依赖链接操作是否成功。
内容的提问来源于stack exchange,提问作者einpoklum
相关产品推荐
相关产品推荐

