2012-01-07 127 views
0

我有幾個問題是關於混合代碼:混合C和C++

  1. 基於C,如果我想用++庫,然後創建一個包裝圍繞它用純C代碼是C完整的項目,然後建立共享庫,我必須更改爲g ++而不是gcc編譯器嗎?

  2. 如果包裝器編譯爲庫的靜態庫會怎麼樣?

+3

A C包裝圍繞C++?多麼令人愉快的轉折。 – 2012-01-07 17:55:21

+3

@LightnessRacesinOrbit:這可能會頻繁發生。你可以用C++編寫一個庫,但希望它可以被C程序使用。 – 2012-01-07 17:56:35

+0

好讀:[混合C和C++](http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html) – 2012-01-07 17:58:18

回答

6

我很想知道你使用的庫只有C++版本,而不是純粹的C接口。

無論如何,因爲您打算調用C++代碼,您的包裝將被視爲C++,並且需要使用g ++進行編譯。這與name-mangling有關,您需要能夠調用C++庫公開的那些函數。你可以用readelf -s來看它們。

但是,封裝器公開的函數將需要標記extern "C",以便它們的名稱不會被損壞。然後,您將能夠從純粹的C應用程序中調用它們。

靜態與共享庫在這裏並不重要。這只是生成正確符號的問題,以便鏈接可以發生。