gpt4 book ai didi

c++ - 为什么 gcc 链接器对 .a 文件和 .o 文件的行为不同?

转载 作者:行者123 更新时间:2023-11-28 05:44:44 25 4
gpt4 key购买 nike

使用 this great answer 中的示例关于 gcc 中的链接顺序,我尝试了以下方法:

echo 'extern int b; int a = b;' > b.cpp
g++ -c b.cpp -o b.o
ar cr libb.a b.o

echo 'int b;' > d.cpp
g++ -c d.cpp -o d.o
ar cr libd.a d.o

echo 'extern int a; int main() { return a; }' > a.cpp

g++ a.cpp -o a1 d.o b.o # Works
g++ a.cpp -o a2 libd.a libb.a # Fails

如果 .a 文件只是一个包含一个或多个 .o 文件的归档文件,如何与 lib*.a 链接> 文件(以错误的顺序,如原始答案中所述)失败,但直接使用 .o 文件(以相同的顺序)有效吗?

最佳答案

就链接器而言,静态库和目标文件的区别在链接序列中是:-

  • 要链接一个目标文件,只因为它是一个目标文件,不管它是否提供可执行文件需要的任何符号的定义。如果你不想要一个对象要链接的文件,不要向链接器提及它。

  • 静态库是要从中提取的目标文件的存档库和链接if required,其中库中的对象文件是required当且仅当它提供了至少一个迄今为止未定义的定义链接器在目标文件或库中观察到的符号较早出现在链式序列。

关于c++ - 为什么 gcc 链接器对 .a 文件和 .o 文件的行为不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36447919/

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