2012-05-25 60 views
1

在windows下,我們有一個C接口(extern「C」{// interface})到我們的C++庫,該接口使用模塊定義文件(.def)導出未加載函數。避免在Linux上共享對象上的C接口上的名稱損壞

我想在linux下重新創建相同的東西,我相對缺乏經驗。我知道在NIX系統下,所有功能默認都是導出的。考慮到這一點,我創建了一個共享對象,我通過nm命令運行。

我很驚訝地看到,與Windows不同,我的函數名已被破壞!

我該如何預防此問題?

+0

使用C編譯器編譯? – pmg

+0

@pmg - 道歉,我已經修改了這個問題。 – dangerousdave

+0

你確定你不只是想編譯一個共享庫,然後將你的主程序鏈接到它?您在Windows中通過.def文件執行的基本功能是在此自動完成的。 – Torp

回答

8

通常的解決方案是聲明函數extern "C"。這不僅會導致名稱像C一樣受到損壞,而且會導致函數使用C調用約定。

+3

因爲在C中被破壞,所以不會被破壞:)? – ScarletAmaranth

+0

+1是正確的,但「與C一樣受到損壞」令人困惑,也許會讓人產生誤導... –

+0

@James - 感謝您的回覆,我們使用的是extern「C」,這就是我所說的「C接口」。我已經更新了這個問題,使其更清楚。 – dangerousdave