我遇到过两个 C++ 库从共享代码中导出完全相同的 C 函数符号的情况。当我现在编译一个链接两个库的可执行文件时,我没有收到来自 VC12 的任何链接器错误或警告。为什么是这样?它只是默默地选择了两个符号之一,我不知道选择了哪个。
extern "C" { __declspec(dllexport) int function(void* argument);}
有一个名为/FORCE 的标志,即使有多个定义的符号,它也可以说服 VC 进行编译,但未设置此标志。
我没有从微软找到任何官方信息,为什么这个链接。我期待收到 LNK4006 警告,但我没有。
最佳答案
您违反了 one 定义规则 。
您程序的行为是未定义的。
请参阅 C++ 标准中的“3.2 一个定义规则 [basic.def.odr]”一节。
3.2.6 节描述了何时可以有多个 定义
程序中的类类型、具有外部链接的内联函数等。
关于c++ - 为什么我可以在 VC 中链接两个导出相同 C-Function 的库?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35040614/