我正在尝试从C ++ dll导出相同签名的两个函数。由于我不希望名字被破坏,我使用的是extern "C"
。但是,当我在依赖walker中打开一个dll时,我可以看到两个函数的入口点是相同的,任何想法为什么?
代码如下: Header.h
#pragma once
extern "C"
{
void _cdecl TestFunc1();
void _cdecl TestFunc2();
}
Header.cpp
#include "Header.h"
void TestFunc1()
{
int i = 0;
}
void TestFunc2()
{
int i = 0;
}
模块定义文件:
EXPORTS
TestFunc1
TestFunc2
这是我在dependecy walker中得到的
答案 0 :(得分:0)
在visual studio中,设置Linker - >优化 - >启用COMDAT折叠到否(/ OPT:NOICF)工作。 Here MSDN说:
Because /OPT:ICF can cause the same address to be assigned to different functions or read-only data members (const variables compiled by using /Gy), it can break a program that depends on unique addresses for functions or read-only data members. For more information, see /Gy (Enable Function-Level Linking).
需要阅读更多关于此链接器标志的确切内容。