看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《fox726 (no comment)》之銘言: : 請問一下 : 有個library是用gcc編譯而成的 : 然而我的程式會call這個library, 卻是用g++編譯的 : 我發現在link的時候, 會出現undefined reference的問題 : 我有試過另外寫一隻小程式去call那個library : 用gcc編譯就可以link, 用g++編譯就會一樣undefined reference : 所以很顯然是因為compiler不一樣的問題@@ : 那我現在的難題是 : 那個library只能用gcc, 而我的程式只能用g++ : 這要怎麼解決link的問題呢? 這是因為 C/C++ 簽章不同所照成的~ 例如 void lala(int); 在 C 可能會被簽成 lala 在 C++ 時則會被簽成 lala_int 因為C++支援overloading的關係, 只有name不夠識別, 所以還要簽上parameter的type (只是假設會被簽成類似這樣的形式~) 所以你用 C++ 編出來的程式, 在linking時, 他會期望有一個 lala_int可以連結, 但你的library用C編出來的卻是 lala, 所以才會找不到(undefined reference) 解法就是告訴 g++ 要連結的這個 lala 是個 c-funtion 在宣告的地方(.h檔之類) 加上 extern "C" lala(int); 或是直接整個用 extern "C" {} 一次包住所有的function header很簡單的話這樣應該就可以解決了@_@" -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.139.146.2
bobhsiao:推一下 03/11 10:40
zxvc:推 03/11 21:48
endl:推 03/13 13:59
damon98:確定答案了,(x86) inline assembly push args to stack. 03/19 20:23