2012-01-03 68 views
1

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

最好的问候, 舍甫琴科

+0

.map file?我认为VS可以生成.map文件。 – fefe 2012-01-03 14:39:35

+0

可能的重复:http://stackoverflow.com/questions/225432/export-all-symbols-when-creating-a-dll – Asaf 2012-01-03 15:20:26

+0

你确定LGPL不允许你静态链接库吗?这不是我的理解。 (有一件事,LGPL发明之前*动态链接被发明之前?) – 2012-01-05 01:00:31

回答

1

IANAL但是如果库LPGL他​​们应该是开放的动态链接。

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

+0

谢谢你的答案。那么,他们是开放的动态链接。然而,他们是为Linux编写的学术人员(该库用于数字建模),即使他们批准增加导出语句,他们也不会被激励来维护它们,因为在Linux下它不是必需的。 – user1128000 2012-01-03 14:49:38

0

我不认为你有这样的自动化。

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

Regards