2013-10-20 94 views
0

我想編一個簡單的「Hello World」用一個完整的,穩定的GCC 4.4.0程序。當我嘗試編譯動態可執行文件時,每件事都可以,但是當我嘗試編譯靜態可執行文件時,出現錯誤「未定義的printf引用」。我試圖在靜態模式下編譯的每個程序都是一樣的。它無法識別libc函數。即使使用「-nostdlib」或「-lc」也是如此!另外「-L ${LD_LIBRARY_PATH}」不解決它。靜態可執行編譯錯誤:未定義的引用

./ccL10382.o: In function `main': 
test.c:(.text+0x4): undefined reference to `printf' 
collect2: ld returned 1 exit status 

我該怎麼辦?

+0

有/無'-nostdlib'我得到了同樣的錯誤 –

+0

我猜 - 靜態選項不適合你,是嗎? '的GCC -Wall -static -g -o測試test.c' – Gooseman

+0

'#GCC -Wall -static -g -o測試test.c的 test.c的:2:警告:的 '主' 返回類型不是「詮釋' /system/android-gcc-4.4.0/sysroot/usr/lib/crtbegin_dynamic.o:在功能'_start': 仿生/的libc /弓形臂/仿生/ crtbegin_dynamic.S :(文本+ 0×10) :'__libc_init'的未定義引用 ./ccx11630.o:在函數'main'中:/data/a/ts/test.c:2:對'printf'的未定義引用 collect2:ld返回1退出狀態' –

回答

0

在第一,考慮libc.a中。看起來應該在/system/android-gcc-4.4.0/sysroot/usr/lib/。 所以你需要執行:

nm /system/android-gcc-4.4.0/sysroot/usr/lib/libc.a | grep的printf的

如果printf的存在,你有鏈接參數有問題。它可以通過添加標誌-v到gcc命令行進行驗證。仔細檢查輸出以瞭解libc鏈接到底是什麼。

相關問題