Software-Installation為什麼
為什麼sudo make install
因“無法辨識的重定位”而失敗?
這是一個問答文章,旨在為遇到相同問題的人準備。
此問題僅在使用不在標準路徑中的單獨工具鏈(gcc、binutils、libtool)時發生。
即,
which gcc
給出未列出的位置sudo env | grep -w "PATH="
這是在 OpenSUSE 13.2 上編譯 octave-4.2 所必需的(標準 gcc 太舊了)。
在只有一個工具鏈且該工具鏈位於標準路徑中的標準系統上,
sudo make install
可以正常工作。這是錯誤,在
sudo make install
:libtool: warning: relinking 'Magick++/lib/libGraphicsMagick++.la' /usr/lib64/gcc/x86_64-suse-linux/4.8/../../../../x86_64-suse-linux/bin/ld: Magick++/lib/.libs/Magick___lib_libGraphicsMagick___la-Image.o: unrecognized relocation (0x2a) in section `.text' /usr/lib64/gcc/x86_64-suse-linux/4.8/../../../../x86_64-suse-linux/bin/ld: final link failed: Bad value collect2: error: ld returned 1 exit status libtool: error: error: relink 'Magick++/lib/libGraphicsMagick++.la' with the above command before installing it
原因如下:
關鍵是
configure
andmake
步驟有效,因為PATH
前面帶有工具鏈的位置(例如gcc
)但
sudo
不傳播變數。因此sudo make install
使用錯誤的工具鏈(例如舊gcc
的)執行命令。一種解決方案是只使用
su
su # make install