导出具有相同性质的函数 我试图从C++ DLL中导出两个相同签名的函数。因为我不希望名称被弄乱,所以我使用extern“C”。然而,当我在Dependency walker中打开dll时,我可以看到这两个函数的入口点是相同的,知道为什么吗
代码如下: 标题.h Header.cpp导出具有相同性质的函数 我试图从C++ DLL中导出两个相同签名的函数。因为我不希望名称被弄乱,所以我使用extern“C”。然而,当我在Dependency walker中打开dll时,我可以看到这两个函数的入口点是相同的,知道为什么吗,c++,C++,代码如下: 标题.h Header.cpp #include "Header.h" void TestFunc1() { int i = 0; } void TestFunc2() { int i = 0; } 模块定义文件: EXPORTS TestFunc1 TestFunc2 这就是我从dependecy walker那里得到的 在visual studio中,将链接器->优化->启用COMDAT折叠设置为“否”(/OPT:NOICF)有效。 MSD
#include "Header.h"
void TestFunc1()
{
int i = 0;
}
void TestFunc2()
{
int i = 0;
}
模块定义文件:
EXPORTS
TestFunc1
TestFunc2
这就是我从dependecy walker那里得到的
在visual studio中,将链接器->优化->启用COMDAT折叠设置为“否”(/OPT:NOICF)有效。 MSDN说:
由于/OPT:ICF会导致将同一地址分配给不同的函数或只读数据成员(使用/Gy编译的常量变量),因此它会中断依赖于函数或只读数据成员的唯一地址的程序。有关更多信息,请参阅/Gy(启用功能级别链接)。
需要阅读更多链接器标志的确切功能。要么是某些内容与您发布的代码不匹配,要么是您有一个非常大胆的优化器。不管函数的内容如何,都会发生这种情况吗?我会尝试使用不同的定义来定义
TestFunc1
和TestFunc2
,以防出现一个偷偷摸摸的优化器配置来检查重复和第一次出现的链接。我使用的是visual studio2013@WhozCraig:是的,它不可能是
EXPORTS
TestFunc1
TestFunc2