我一直在尝试在 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#
我不知道该怎么办 :/
答案1
你实际上并不是在交叉编译;而是在交叉编译。要交叉编译,您需要了解./configure
您的目标架构:
./configure --prefix=/usr/local --host=arm-linux-gnueabi
然后,您应该获得使用 的 Makefilesarm-linux-gnueabi-gcc
以及生成的squid
适合您的 ARM 设备的二进制文件。 (当然假设您拥有所有必需的库。)
答案2
您可以手动编辑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