当我 link 两个时,我可以在两个 C++ 静态库中有两个主要函数吗?

I can have two main function in two static library of C++ when I link both of them?

我有三个文件:

test.cpp(为空):


main1.cpp

int main()
{
    printf("main_1\n");
    return 0;
}

main2.cpp

int main()
{
    printf("main_2\n");
    return 0;
}

然后我创建两个静态库main1.amain1.a.

g++ -c main1.cpp

ar main1.a main1.o

g++ -c main2.cpp

ar main2.a main2.o

我发现输出会因 main1.amain2.a 的顺序而不同,因为

为什么它不会将错误消息 "multiple definition of `main'" 作为命令?:

g++ -o 输出 test.cpp main1.cpp main2.cpp

链接器处理这两种情况的方式非常不同(默认情况下)。将代码编译成目标文件并链接它们时,链接器将不允许存在两个强定义。此处的 Strong 是指具有设定值的函数或变量。它将允许一个强的和多个弱的(比如一个变量在一个对象中有一个设置值,另一个对象有相同的变量但没有设置值)。

对于静态库,链接器会按照给定的顺序遍历它们。它查找导出,如果其他链接对象需要它们中的任何一个,它会将其接收并重新启动该文件中的进程(以查找刚刚找到的函数可能需要的函数)。所以在这个过程中,当它到达第一个库时,它检查它的导出,看到 main,确定它是需要的并接受它。然后它进入第二个库,看到 main,没有在未定义符号列表中查看它并跳过它。

可以在 Eli Bendresky’s website

上找到更多信息