我用g++
編譯了一個庫,我想用gcc
來鏈接它。
問題是當鏈接反對我得到一個錯誤:如何刪除共享庫中符號周圍的字符?
未定義的引用「functionName`
(functionName是在庫中的函數名)
雖然功能存在於符號列表中,並在鏈接時指定gcc
的路徑。
這是因爲該功能顯示在列表中與周圍的字符(我認爲這是壓倒一切?):
Z12functionNameiSt9__va_list
我知道要刪除這些字符我應該圍繞與extern "C"
函數的聲明。我這樣做:
//header.hpp
extern "C" int functionName(int argc, ...);
但是周圍的字符仍然出現在符號列表中的函數名稱周圍。這就是爲什麼gcc
找不到它。
我爲Linux手臂yokto交叉編譯與arm-poky-linux-gnueabi-gcc
和arm-poky-linux-gnueabi-g++
Ubuntu桌面16
上爲什麼沒有被刪除周圍人物,我怎麼能刪除?我永遠不會重寫這個函數,所以如果這些都是重寫的話,我不需要它們。
編輯:
解決。其聲明中的函數簽名與其定義中的簽名不同......因此,關鍵字extern
毫無用處。
int functionName(int argc, ...); //declaration
int functionName(int argc, va_list args) //definition
也許你忘了'#include' –
@BasileStarynkevitch - 它包含 –