gcc prefix小结

--prefix=dirname

指定顶层安装目录,推荐用这种方式将文件安装到非默认目录。顶层目录默认为/usr/local

这里以安装 supersparrow-0.0.0 为例。

我们打算把他安装到目录/usr/local/supersparrow,于是执行带选项的脚本./configure–prefix=/usr/local/supersparrow,执行成功后再编 译、安装(make,make install);

安装完成将自动生成目录supersparrow,而且该软件任 何的文档都被复制到这个目录。

为什么要指定这个安装目录?

是为了以后的维护方便,假如有没有用这个功能,安装过程结束后,该软件所需的软件被复制到不同的系统目录下,很难弄 清楚到底复制了那些文档、都复制到哪里去了。 用了—prefix 选项的好处是当某个安装的软件不再需要 时,只须简单的删除该安装目录,就能够把软件卸载得干干净净;移植软件时只需拷贝整个目 录到另外一个机器即可(相同的操作系统)。 一个小选项有这么方便的作用,建议在实际工作中多多使用。

你仍然看到这个错误: ``` ./configure: error: C compiler /usr/bin/aarch64-linux-gnu-gcc is not found ``` 说明 **Nginx 的 configure 脚本无法在系统路径中找到你指定的交叉编译器**。 虽然你写了路径 `/usr/bin/aarch64-linux-gnu-gcc`,但实际可能: - 编译器没安装 - 安装了但名字不对 - 权限问题或符号链接损坏 --- ## ✅ 分步排查与解决方案 ### 🔍 步骤 1:确认编译器是否真的存在 运行命令: ```bash ls -l /usr/bin/aarch64-linux-gnu-gcc ``` ✅ 正常输出应类似: ``` -rwxr-xr-x 1 root root ... /usr/bin/aarch64-linux-gnu-gcc ``` ❌ 如果提示: ``` ls: cannot access '/usr/bin/aarch64-linux-gnu-gcc': No such file or directory ``` → 说明 **根本没安装!** --- ### ✅ 解决方案:正确安装 aarch64 交叉编译工具链(Ubuntu/Debian) ```bash sudo apt update sudo apt install -y \ gcc-aarch64-linux-gnu \ g++-aarch64-linux-gnu \ libc6-dev-arm64-cross \ binutils-aarch64-linux-gnu ``` 📌 这些包会自动创建: ``` /usr/bin/aarch64-linux-gnu-gcc /usr/bin/aarch64-linux-gnu-g++ ``` > ⚠️ 注意:不要手动下载或软链接,使用系统包管理器最可靠! --- ### 🔍 步骤 2:验证编译器能否执行 ```bash /usr/bin/aarch64-linux-gnu-gcc --version ``` ✅ 成功输出示例: ``` aarch64-linux-gnu-gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0 Copyright (C) 2019 Free Software Foundation, Inc. ... ``` ❌ 如果报错 `command not found` 或 `Permission denied`,说明未安装或权限异常。 --- ### 🔍 步骤 3:检查 configure 是否能调用它(加 `-v` 调试) 修改你的脚本,在 `./configure` 前加上 `set -x` 查看真实传参: ```bash set -x ./configure \ --with-cc=/usr/bin/aarch64-linux-gnu-gcc \ ... ``` 你会看到类似输出: ```bash + ./configure '--with-cc=/usr/bin/aarch64-linux-gnu-gcc' ... ``` 然后 configure 内部会尝试运行: ```bash /usr/bin/aarch64-linux-gnu-gcc -c test.c ``` 如果失败,可能是权限、路径拼写错误,或中间有空格。 --- ### 🔍 步骤 4:排除 shell 变量导致的路径错误 不要这样写: ```bash CC=aarch64-linux-gnu-gcc --with-cc=$CC # ❌ 没有绝对路径,可能找不到 ``` ✅ 改成: ```bash CC="/usr/bin/aarch64-linux-gnu-gcc" --with-cc="$CC" ``` 或者直接硬编码: ```bash --with-cc=/usr/bin/aarch64-linux-gnu-gcc ``` 避免变量扩展出错。 --- ### 🔍 步骤 5:检查文件权限和架构兼容性 #### 检查权限: ```bash file /usr/bin/aarch64-linux-gnu-gcc ``` 输出应为: ``` ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, ... ``` ✅ 是 x86_64 的可执行文件(能在你主机上运行) ❌ 如果是 aarch64 架构 → 不可能运行!那是错的! > 💡 提示:交叉编译器本身必须是 **x86_64 架构** 的程序,才能在你的 PC 上运行。 #### 检查可执行权限: ```bash ls -l /usr/bin/aarch64-linux-gnu-gcc ``` 确保有 `x` 权限: ``` -rwxr-xr-x 1 root root ... ``` 如果没有,修复: ```bash sudo chmod +x /usr/bin/aarch64-linux-gnu-gcc ``` --- ### ✅ 终极测试:手动编译一个测试程序 创建 `test.c`: ```c int main() { return 0; } ``` 尝试用你的编译器编译: ```bash /usr/bin/aarch64-linux-gnu-gcc -o test.o -c test.c ``` ✅ 成功 → 编译器工作正常 ❌ 失败 → 查看具体错误(缺失库?动态链接失败?) 常见错误: ``` error while loading shared libraries: libisl.so.15: cannot open shared object file ``` → 说明依赖库缺失,需要用以下命令修复: ```bash sudo apt install -f ``` 或者重新安装: ```bash sudo apt reinstall gcc-aarch64-linux-gnu ``` --- ### ✅ 推荐最终配置命令(完整验证版) ```bash #!/bin/bash # === 显式定义编译器路径 === CC="/usr/bin/aarch64-linux-gnu-gcc" # === 验证编译器是否存在且可执行 === if [ ! -x "$CC" ]; then echo "❌ 错误:找不到或无法执行 $CC" echo "💡 安装命令:" echo " sudo apt install -y gcc-aarch64-linux-gnu" exit 1 fi echo "✅ 找到编译器:$($CC --version | head -n1)" # === 设置其他变量 === INSTALL_DIR=$(pwd)/_install PCRE_PATH="../pcre-8.45" ZLIB_PATH="../zlib-1.2.11" OPENSSL_PATH="../openssl-1.1.1f" # === 清理旧构建 === make clean 2>/dev/null || true rm -rf objs autoconf.err # === 启用调试输出 === set -x # === 配置命令(单行 cc-opt 避免空格问题)=== ./configure \ --prefix="$INSTALL_Dir" \ --with-cc="$CC" \ --with-cpp="/usr/bin/aarch64-linux-gnu-g++" \ --with-cc-opt="-DNGX_SIZEOF_SIZE_T=8 -DNGX_SIZEOF_OFF_T=8 -DNGX_SIZEOF_TIME_T=8 -DNGX_PTR_SIZE=8 -D_GNU_SOURCE -pthread" \ --with-ld-opt="-pthread" \ --without-http_upstream_zone_module \ --with-http_ssl_module \ --with-pcre="$PCRE_PATH" \ --with-zlib="$ZLIB_PATH" \ --with-openssl="$OPENSSL_PATH" \ --with-openssl-opt="no-shared no-asm -fPIC linux-generic32" \ --crossbuild=Linux::aarch64::gcc \ --build=Linux::x86_64 ``` --- ### ✅ 小结:为什么“找不到”? | 原因 | 如何判断 | 如何解决 | |------|----------|---------| | 未安装 | `ls /usr/bin/aarch64-linux-gnu-gcc` 找不到 | `apt install gcc-aarch64-linux-gnu` | | 名字写错 | 写成 `aarch64-linux-gcc` | 补全为 `aarch64-linux-gnu-gcc` | | 权限不足 | `ls -l` 无 `x` | `chmod +x` 或重装 | | 动态库缺失 | 运行时报 `libxxx.so not found` | `apt install -f` | | 使用了变量拼接错误 | `$CC` 展开为空或带空格 | 直接写完整路径 | --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值