我在链接一个由“纯”C .c 文件的项目中的几个 cpp 文件组成的静态库时遇到了问题。 .c 文件正在寻找语法为 _FUNCTIONAME 的函数对象,如下所示:
logforwarder.obj : error LNK2001: unresolved external symbol _getEventLogProviders
但是 .lib 文件是这样导出的: 文件 M:...\Release\recvevent.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
没有任何效果,因为错位函数没有正确编写。
关于c++ - 为 Visual Studio C++ 静态库强制导出名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7063691/