C&C++多系統整合需要注意的問題

來源:互聯網
上載者:User

C&C++系統,經常遇到要多系統繼承的情況,比如把一個第三方庫引入到一個現有系統中,或者整合幾個現有庫,有些時候,我們發現編譯和連結會發生一些莫名奇妙的問題,下面把遇到的問題給於總結:

1. 編譯錯誤

(1)標頭檔沒找到

這種情況解決起來比較簡單,先確定系統裡到底沒有引用到的標頭檔,有的話再確定編譯器是否能找到標頭檔所在的路徑。

(2)類型、變數或者函數未聲明

有兩種情況:

A. 有多個同名標頭檔,結果編譯器首先找到的並不是實際需要的

解決辦法就是:把需要的標頭檔路徑放在前邊

B. 引用到了正確的標頭檔,而且明明就是聲明了或者定義了,還是說沒找到

問題很可能就是出在了條件編譯上,某些編譯環境定義的宏擋住了真正的定義,可用#error "Msg" 測試到底編譯器處理沒處理定義部分,開啟宏即可

2. 連結錯誤

編譯錯誤一般就是符號沒找到,有兩大類情況:

(1). 確實沒有定義符號

這個需要添加了,沒什麼其他辦法

(2). 確實定義了符號,連結還是說找不到,有三種情況:

A. 條件編譯擋住了函數定義

可以看下編譯器是否編譯到了需要的介面

B. nm類似的命令可看是否有符號定義,這種情況下最有可能的原因是.o檔案重名了,可看下符號具體所在的源檔案名稱,修改至不重名即可.

C. C++調用C函數時候,會預設認為是需要命名轉換的,比如Revert介面,C++會調用_zxyRevert_sjX3類似的介面,但是相應的C源碼被編譯後,產生的符號是_Revert,這時候

需要把C++中引用到的C介面,用extern "C"聲明下即可,這也是extern "C"的作用了.

 

綜上,需要注意的是,C++引用C介面、標頭檔重名、源檔案重名,經常會帶來莫名其妙的問題,需要加以注意!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.