gpt4 book ai didi

linker - 有没有办法知道哪个编译器生成了静态库?

转载 作者:行者123 更新时间:2023-12-04 04:08:50 31 4
gpt4 key购买 nike

第三方为我提供了一个静态lib(.a)以便与solaris站链接。
我尝试使用sunpro进行编译,但在链接步骤失败。

我想问题出在我使用的编译器(而不是gcc?)或它的版本(由于编译器提供的std lib可能与库AFAIK期望的版本不同,因此可能导致链接步骤出错)。

我怎么知道哪个编译器用来生成这个库?有一些工具可以做到这一点吗?在sunpro/gcc中有其他选择吗?

提示:我已经读了一段时间,编译器在生成目标文件时使用不同的处理约定(是吗?)。仍然,“nm --demangle” 命令行向我很好地打印了该静态库中调试符号的所有函数名称。它是如何工作的 ?如果我的假设还可以, nm 确实可以解决静态库中正在使用的约定,不是吗?还是仅仅是因为lib是GNU gcc生成的,因为nm是GNU binutils的一部分?

我离工作站很近,因此无法复制并粘贴链接器的错误输出(暂时不行,但可以在进一步的编辑中复制它们)

最佳答案

我倾向于使用strings程序(带有'-a'选项,或者是我自己的变体,其中'-a'行为是标准的),并寻找明显的迹象。例如,在我自己的一个库中,我发现:

/work1/gcc/v4.2.3/bin/../lib/gcc/sparc-sun-solaris2.10/4.2.3/include
/work1/gcc/v4.3.0/bin/../lib/gcc/sparc-sun-solaris2.10/4.3.0/include
/work1/gcc/v4.3.1/bin/../lib/gcc/sparc-sun-solaris2.10/4.3.1/include
/work1/gcc/v4.3.3/bin/../lib/gcc/sparc-sun-solaris2.10/4.3.3/include

这表明该库中的代码已经使用了多种版本的GCC进行了编译(实际上,我在单个库中找到如此多的版本感到非常惊讶)。

另一个库包含:
cg: Sun Compiler Common 11 Patch 120760-06 2006/05/26
acomp: Sun C 5.8 Patch 121015-02 2006/03/29
iropt: Sun Compiler Common 11 Patch 120760-06 2006/05/26
/compilers/v11/SUNWspro/prod/bin/cc -O -v -Xa -xarch=v9 ...

因此,通常在目标文件中有指纹,表明使用了哪个编译器。但是您必须知道如何查找它们。

关于linker - 有没有办法知道哪个编译器生成了静态库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/727813/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com