c++ - 为 Visual Studio C++ 静态库强制导出名称

标签 c++ visual-studio visual-c++

我在链接一个由“纯”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/

相关文章:

c++ - C++链表中的内存损坏

visual-studio - Visual Studio - 找不到 "export template"选项

visual-studio - 如何为 Visual Studio 2017 安装 Entity Framework Power Tools?

.net - 目标4.5.1,并且x64上任何CPU以32位运行,4.5以64位运行,为什么?

visual-c++ - Visual C++ Express - 数十个 vcpkgsrv.exe

android - 如何使用适用于 android 的 Windows 7 64 位操作系统使用 ndk r12 配置 FFmpeg 库

c++ - 输出输入的拼接版本

c++ - 为什么这些 lambda 捕获的值有不同的类型?

c++ - c++类与OpenCV矩阵运算之间的转换

c++ - 什么是 &= 和 |=