Compiling

魷魚交叉編譯

  • September 14, 2015

我一直在嘗試在 ARM Cortex A8 (Linux) 上交叉編譯 Squid 3.5.7。我從http://www.squid-cache.org/Versions/v3/3.5/

下載了它, 我有 arm-linux-gnueabi-gcc 和 arm-linux-gnueabi-g++。

tar -zxvf squid-3.5.7.tar.gz
cd squid-3.5.7
./configure --prefix=/usr/local/squid

在 ./configure –prefix=/usr/local/squid 我有這個 Makefile:http ://wklej.se/makefile

make all
make install

接下來,我將文件夾 /usr/local/squid 和 ~/squid-3.5.7 複製到 SD 卡。

當我嘗試從 ARM 板上的 SD 卡打開 ./squid -z 時,我遇到了問題:

root@am335x:/# ls
bin       etc       lib       mnt       srv       usr
boot      findHelp  linuxrc   proc      sys       var
dev       home      media     sbin      tmp
root@am335x:/media/mmcblk0/squid/sbin# ls
squid
root@am335x:/media/mmcblk0/squid/sbin# ./squid -z
./squid: line 20: syntax error: ")" unexpected
root@am335x:/media/mmcblk0/squid/sbin# ./squid
./squid: line 20: syntax error: ")" unexpected
root@am335x:/media/mmcblk0/squid/sbin#

我不知道該怎麼辦 :/

你實際上並沒有交叉編譯。要交叉編譯,您需要說明./configure您的目標架構:

./configure --prefix=/usr/local --host=arm-linux-gnueabi

然後,您應該獲得使用 的 Makefile ,以及適合您的 ARM 設備arm-linux-gnueabi-gcc的生成二進製文件。squid(當然,假設您擁有所有必要的庫。)

您可以手動編輯 configure.ac 文件,查找 atomic 部分並替換該行

AC_RUN_IFELSE([AC_LANG_PROGRAM([[

AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[

然後您需要執行 bootstrap.sh 來重新創建配置腳本。

這應該可以讓您進行配置,但編譯/連結可能會失敗,因為您的工具鏈實際上可能不支持 __sync_xxx 呼叫。在我的情況下, libatomic.so 不包含這些呼叫。然後我不得不求助於手動編輯配置腳本以始終對原子檢查響應“否”:

squid_cv_gnu_atomics=yes

squid_cv_gnu_atomics=no

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