[問題] extern "C" 部份function無作用
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
Android (AOSP) on Linux
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
無
問題(Question):
我現在要將一個library整合進AOSP中,先前都已porting完成可以正確呼叫,
但今天要修改API的參數時,發現link error:
原先我的header裡是這樣寫:(舉例)
extern "C" {
int func1();
int func2();
}
func1和func2都可以正常被link到,用readelf -s看symbol,也是沒有C++前後綴詞的。
今天我打算新增一個參數,
extern "C" {
int func1();
int func2(int param1);
}
發現link error (undefined reference),用readelf去看,發現func2的symbol變成
_Z10func2i,也就是變得跟沒加extern "C"時一樣。
我試著再新增一個func3,也是和func2一樣的情況。
clean build、手動刪除obj都試過了,但還是一樣。
之前也有修改過參數,但都沒有問題,請問我是不是漏掉了什麼步驟呢?
餵入的資料(Input):
無
預期的正確結果(Expected Output):
symbol應沒有C++符號詞綴。
錯誤結果(Wrong Output):
symbol有C++符號詞綴。
程式碼(Code):(請善用置底文網頁, 記得排版)
如上面問題說明。
補充說明(Supplement):
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.87.128.158
推
12/26 20:00, , 1F
12/26 20:00, 1F
應該和這無關
最開始的問題是我在某個有三個參數的function中打算新增參數,結果一加就error
也不是參數數量的問題,因為有個function參數將近10個也沒問題...
→
12/26 21:06, , 2F
12/26 21:06, 2F
→
12/26 21:11, , 3F
12/26 21:11, 3F
→
12/26 21:29, , 4F
12/26 21:29, 4F
→
12/26 21:30, , 5F
12/26 21:30, 5F
cpp確定有改到,我還rollback到原本正常的版本,手動新增一個參數,結果就像
這樣了...
※ 編輯: lwecloud 來自: 218.161.19.17 (12/26 21:35)
※ 編輯: lwecloud 來自: 218.161.19.17 (12/26 21:36)
→
12/26 21:37, , 6F
12/26 21:37, 6F
是的,我很肯定...還複製貼上過了(有記得加上/拿掉分號)
昨天把整個系統rebuild 還是一樣orz
※ 編輯: lwecloud 來自: 219.87.128.158 (12/27 09:38)
找到問題點了,之前在複製.h的時候多放了一個在別的資料夾中
變成這樣:
/MyProj/lib.cpp
/MyProj/lib.h
/MyProj/include/lib.h
原本應該是改/MyProj/include/lib.h這個檔,但compiler優先去讀/MyProj/lib.h
把/MyProj/lib.h刪掉就正常了。
的確如Feis板友所猜測的原因一樣,是宣告和定義不同造成的,只是盲點在一個重
複的檔案...。
感謝各位板友<(_ _)>
※ 編輯: lwecloud 來自: 219.87.128.158 (12/27 09:45)
→
12/27 11:46, , 7F
12/27 11:46, 7F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章