C++ 32位与64位库装饰

C++ 32位与64位库装饰,c++,visual-studio-2010,static-libraries,C++,Visual Studio 2010,Static Libraries,我使用以下函数在VS2010中创建了一个简单的dll: extern "C" { __declspec(dllexport) int myFunc() { return 1; } } 我比较了为x64和Win32平台生成的dll和lib文件,发现了一个我不理解的结果 使用Dependency Walker,我看到两个DLL都将显示未修饰的“myFunc”。 但是,在记事本++中打开两个lib文件时,Win32 lib显示“_myFunc”,而x64仅显示“myFunc” 有

我使用以下函数在VS2010中创建了一个简单的dll:

extern "C"
{
  __declspec(dllexport) int myFunc()
  {
    return 1;
  }
}
我比较了为x64和Win32平台生成的dll和lib文件,发现了一个我不理解的结果

使用Dependency Walker,我看到两个DLL都将显示未修饰的“myFunc”。 但是,在记事本++中打开两个lib文件时,Win32 lib显示“_myFunc”,而x64仅显示“myFunc”


有人能解释一下为什么lib签名不同吗?是否可以删除32位lib文件中的下划线?

签名是什么,您不能(或不应该)用编辑器更改它

LIB是不同的,因为一个用于32位,另一个用于64位


请记住,dll会生成一个.lib,但它仅在编译时供您使用,重要的部分是dll本身,您可以删除.lib并毫无问题地执行.exe

嗯,我对名称装饰一无所知,因此您的链接很有趣。我做了一些进一步的研究,在这页()上发现“Windows上的64位约定(Microsoft C)没有前导下划线”。我不相信这真的回答了问题。你说的是.lib和.lib根本不是matther,重要的部分是dll,你看到32位和64位,具有相同的签名,因此.exe在使用32位或64位dll时不会失败。为什么要纠结于一些无关紧要的事情呢?VS将为您链接它,下划线可能意味着其他优化选项和其他依赖于.lib的编译器选项