0
我有幾個問題是關於混合代碼:混合C和C++
基於C,如果我想用++庫,然後創建一個包裝圍繞它用純C代碼是C完整的項目,然後建立共享庫,我必須更改爲g ++而不是gcc編譯器嗎?
如果包裝器編譯爲庫的靜態庫會怎麼樣?
我有幾個問題是關於混合代碼:混合C和C++
基於C,如果我想用++庫,然後創建一個包裝圍繞它用純C代碼是C完整的項目,然後建立共享庫,我必須更改爲g ++而不是gcc編譯器嗎?
如果包裝器編譯爲庫的靜態庫會怎麼樣?
我很想知道你使用的庫只有C++版本,而不是純粹的C接口。
無論如何,因爲您打算調用C++代碼,您的包裝將被視爲C++,並且需要使用g ++進行編譯。這與name-mangling有關,您需要能夠調用C++庫公開的那些函數。你可以用readelf -s
來看它們。
但是,封裝器公開的函數將需要標記extern "C"
,以便它們的名稱不會被損壞。然後,您將能夠從純粹的C應用程序中調用它們。
靜態與共享庫在這裏並不重要。這只是生成正確符號的問題,以便鏈接可以發生。
A C包裝圍繞C++?多麼令人愉快的轉折。 – 2012-01-07 17:55:21
@LightnessRacesinOrbit:這可能會頻繁發生。你可以用C++編寫一個庫,但希望它可以被C程序使用。 – 2012-01-07 17:56:35
好讀:[混合C和C++](http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html) – 2012-01-07 17:58:18