如何在c++中自动导出文件名,以便在DLL中使用
how to automatically export names in C++ source to be used in DLL
我有一个用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
对
相关文章:
- 从命令行c++发送文本文件名
- 挂起和取消挂起一个文件DLL
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 导入库可以跨dll版本工作吗
- 从C++dll访问C#中的一行主要参数
- 链接到自行创建的dll失败
- 为什么使用 P/Invoke 调用 dll 时,某些计算机中的 LoadLibrary 失败?
- 在调用FreeLibrary后,释放动态链接到具有相同版本的CRT堆的DLL的内存
- 如何指定我希望我的LIB链接到的DLL文件?-Visual Studio 2019
- 为什么文件名被设置为一个点,而不是在读取矢量中的文件名时
- 如何将图像传输到c++(dll)中的缓冲区,然后在c#的缓冲区中读/写
- C++:将外部库链接到dll库
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 不同的Visual Studio版本中缺少.dll
- 从DLL中删除类的实例
- 如何在c++中自动导出文件名,以便在DLL中使用
- 使用regex检测带有特定前缀的DLL文件名
- MFC:如何获得DLL文件名
- 如何从DLL的文件名中获取进程ID (windows)