如何在c++中自动导出文件名,以便在DLL中使用

how to automatically export names in C++ source to be used in DLL

本文关键字:DLL 文件名 c++      更新时间:2023-10-16

我有一个用c++编写的库(并且我有它的完整源代码)。由于其LGPL许可,我只能通过动态链接将其与我公司的专有软件一起使用(静态链接也可以)。因此,我需要将其构建到DLL中。然而,该库非常大,并且不导出任何内容(因此在类和全局函数名前面没有.def文件和__declspec(dllexport)语句)。所以,当我建立一个dll时,它是无用的,因为它没有导出名称,所以它不会链接。在我们公司,我们使用的是MS Visual c++,它是默认的不导出名称(例如,GNU GCC在Windows上通过MINGW运行时可以导出名称)。因此,目前我看到的唯一选择是将__declspec(dllexport)放在我正在使用的库中的每个名称前面(并且有数千个),或者为这些名称编写.def文件。但即使我这样做了,我也不能使用下一个版本的库,因为我还得再做一次。我一直在寻找一种工具来完成这些导出,或者生成.map文件,但是没有一种工具真正完成这个特定的任务(有一些DEF生成器,但它们主要搜索DUMPBIN/EXPORT的结果,在我的情况下没有给出任何结果)。我在网上搜索了两天的答案,但没有好的结果。

最诚挚的问候,安德烈。

IANAL但是如果库是LPGL,它们应该对动态链接开放。

您是否考虑过修改源文件并更新Makefile以提供一种生成动态库并获得维护者批准的方法?很有可能他们会对它开放,未来的版本就会正常工作。

我不认为有你想要的自动化。

我的建议是编辑源代码(如你所说);使用notepad++的宏或使用Replace Pioneer