Ubuntu

編譯ffmpeg時出錯:gcc無法創建執行檔

  • July 4, 2019

當我./configure在 ffmpeg 源目錄中執行命令時,出現此錯誤:

gcc is unable to create an executable file. If gcc is a cross-compiler, use the --enable-cross-compile option. Only do this if you know what cross compiling means. C compiler test failed.

If you think configure made a mistake, make sure you are using the latest version from Git.  If the latest version fails, report the problem to the ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.freenode.net. Include the log file "config.log" produced by configure as this will help solving the problem.

在 config.log 中:

check_ld cc
check_cc
BEGIN /tmp/ffconf.xECiIX7z.c
   1   int main(void){ return 0; }
END /tmp/ffconf.xECiIX7z.c
gcc -c -o /tmp/ffconf.xsCaoMWN.o /tmp/ffconf.xECiIX7z.c
gcc -o /tmp/ffconf.ApzYq7NQ /tmp/ffconf.xsCaoMWN.o
/usr/lib/gcc/x86_64-linux-gnu/4.6.1/../../../x86_64-linux-gnu/crt1.o: In function `_start':
(.text+0x12): undefined reference to `__libc_csu_fini'
/usr/lib/gcc/x86_64-linux-gnu/4.6.1/../../../x86_64-linux-gnu/crt1.o: In function `_start':
(.text+0x19): undefined reference to `__libc_csu_init'
collect2: ld returned 1 exit status
C compiler test failed.

怎麼了?我該怎麼辦?

您的 libc 安裝不完整或以某種方式損壞。您應該說出您使用的作業系統…最簡單的解決方法可能是重新安裝包含 libc 的軟體包。

或者,如果您真的有興趣找出它的哪一部分壞了,這裡有一些提示:

在典型的 glibc 安裝中,對__libc_csu_init和的引用__libc_csu_fini將通過找到它們來解決/usr/lib/libc_nonshared.a,您可以在其中檢查如下:

$ nm /usr/lib/libc_nonshared.a | egrep '__libc_csu_(init|fini)'
0000000000000000 T __libc_csu_fini
0000000000000010 T __libc_csu_init

的使用/usr/lib/libc_nonshared.a將通過連結到/usr/lib/libc.so(這是一個文本文件,而不是實際的共享對象)來觸發。您可以像這樣檢查:

裡面可能還有一些其他的東西。你可以檢查一下

$ less /usr/lib/libc.so
[...]
GROUP ( /lib/libc.so.6 /usr/lib/libc_nonshared.a )

/usr/lib/libc.so連結器將使用它來滿足-lc要求,您可以像這樣檢查:

$ ld --verbose -lc
[... lots of stuff ...]
opened script file /usr/lib64/libc.so
attempt to open /lib/libc.so.6 succeeded
/lib/libc.so.6
attempt to open /usr/lib/libc_nonshared.a succeeded

這意味著您沒有必要的軟體來編譯 C 程式碼。

執行這個:

apt-get install build-essential

您還需要 ffmpeg 的建構依賴項:

apt-get build-dep ffmpeg

然後再試一次。

引用自:https://unix.stackexchange.com/questions/47057