强制Visual Studio c++静态库的导出名称

Forcing an export name for Visual Studio C++ static library

本文关键字:Visual Studio c++ 静态 强制      更新时间:2023-10-16

我在一个"纯"C . C文件的项目中链接一个由几个cpp文件组成的静态库时遇到了麻烦。.c文件查找语法为_FUNCTIONAME的函数对象,如下所示:

logforwarder.obj : error LNK2001: unresolved external symbol _getEventLogProviders

,但.lib文件导出如下:转储文件M:…Releaserecvevent.lib

File Type: LIBRARY
     Exports
       ordinal    name
                  ?_getEventLogProviders@@YAIPAPAD@Z (unsigned int __cdecl _getE
ventLogProviders(char * *))
  Summary
          C3 .debug$S
          14 .idata$2
          14 .idata$3
           4 .idata$4
           4 .idata$5
           C .idata$6

exports.def文件如下所示:

EXPORTS
 getEventLogProviders=getEventLogProviders @4

项目可以成功链接的库,导出如下函数:

Dump of file M:...screenshot.lib
File Type: LIBRARY
     Exports
       ordinal    name
                  _ReflectiveLoader@4

我做错了什么?

装饰在导出函数的开头添加下划线,并在末尾添加带数字的@。因此,您的.def文件应该像这样:

getEventLogProviders=_getEventLogProviders@4

就像现在一样,.def没有任何作用,因为修改后的函数没有正确编写。