【发布时间】:2020-03-26 17:53:27
【问题描述】:
我有三个文件:
test.cpp(它是空的):
main1.cpp
int main()
{
printf("main_1\n");
return 0;
}
main2.cpp
int main()
{
printf("main_2\n");
return 0;
}
然后我创建两个静态库 main1.a 和 main1.a。
g++ -c main1.cpp
ar r main1.a main1.o
g++ -c main2.cpp
ar r main2.a main2.o
我发现输出会有所不同取决于 main1.a 和 main2.a 作为
-
main1.a 在 main2.a
前面$ g++ -o out test.cpp main1.a main2.a
$ ./out
输出是“main_1”
-
main2.a 在 main1.a
前面$ g++ -o out test.cpp main2.a main1.a
$ ./out
输出是“main_2”
为什么它不会有错误信息“multiple definition of `main'”作为命令?:
g++ -o out test.cpp main1.cpp main2.cpp
【问题讨论】:
-
@SamiKuhmonen,感谢您的回复。那么这是否意味着错误消息是在编译阶段生成的?
-
不,它发生在链接阶段。链接器只是对目标文件和静态库使用不同的规则。第一个是“包含所有”,第二个是“包含你在目标文件中找不到的内容并获取第一个匹配的”