2012-01-03 71 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