2018年5月11日 星期五

編譯時出現/usr/bin/ld: cannot find -ldxxx

編譯static executable的時候,有時候會出現下面的錯誤訊息:
  • /usr/bin/ld: cannot find -lm
  • /usr/bin/ld: cannot find -lc
  • collect2: error: ld returned 1 exit status
意思就是說,在連結的時候缺少了libm與libc這兩個函式庫(注意-lm配的是libm、-lc配對的是libc),但用下面的指令測試:
  • /sbin/ldconfig -p | grep libm.so
    這邊會顯示出libm.so檔案的位置
  • /sbin/ldconfig -p | grep libc.so
    這邊會顯示出libc.so檔案的位置
  • gcc -lm --verbose
    這邊不會出現cannot find -lm
意思就是說,函式庫是存在的,但是沒辦法做成靜態連結。解決為安裝靜態連結函式庫了,通常套件的名字會是glibc-static,在CentOS這種用yum的機器上面,輸入:
  • yum list installed | grep glibc
  • sudo yum install glibc-static
這樣應該就可以順利編譯static executable了~

參考資料

_EOF_

沒有留言:

張貼留言