gcc static靜態編譯選項提示錯誤:/usr/lib/ld:cannot find -lc


在學習gcc靜態庫動態庫編譯的時候選用靜態庫編譯時出錯顯示:/usr/lib/ld:cannot find -lc

百度:/usr/lib/ld:cannot find -lc多處給的解決方案為:

然而並不能解決問題,最終定位發現是靜態編譯的問題。而且不止會出現這種情況:

/usr/lib/ld:cannot find -lc

/usr/lib/ld:cannot find -lgcc_s

/usr/lib/ld:cannot find -lm

等的錯誤,主要原因在靜態編譯時需要鏈接靜調庫。如上命令:

[xiaohexiansheng@centos6 app]$ gcc -static -I./libs main.c -o app -L./libs -lcrypto -lfunc

如果在編譯時去掉-static選項選用動態庫編譯則不會出現此種情況

[xiaohexiansheng@centos6 app]$ gcc -I./libs main.c -o app -L./libs -lcrypto -lfunc
[xiaohexiansheng@centos6 app]$ ls
app  libs  main.c

非靜態編譯時ldd filename,顯示如下,這是可執行程序所需的動態庫,運行可執行程序時需要的動態庫。

[xiaohexiansheng@centos6 app]$ ldd app
        linux-gate.so.1 =>  (0x004ad000)
        libcrypto.so => /usr/lib/libcrypto.so (0x03ad9000)
        libfunc.so => not found
        libc.so.6 => /lib/libc.so.6 (0x0052a000)
        libdl.so.2 => /lib/libdl.so.2 (0x0070c000)
        libz.so.1 => /lib/libz.so.1 (0x00713000)
        /lib/ld-linux.so.2 (0x00508000)

靜態編譯時需要將所有的.a庫鏈接到可執行文件中,所以需要libc靜態庫文件,在系統找查找glibc-static提示沒有庫文件。

#yum install glibc-static安裝靜態庫。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM