如何让configure脚本使用自定义工具链?xtensa lx106架构编译场景
针对Xtensa LX106这种不在默认config.guess/config.sub里的小众架构,交叉编译时确实会遇到configure报错的情况,下面是几个实用的解决思路:
方法一:显式指定工具链路径与编译工具
这是最直接的方式,不需要修改系统文件或项目配置,直接在configure命令里明确指定每个编译工具的绝对路径:
假设你的自定义工具链放在/opt/xtensa-lx106-toolchain/bin,工具链前缀是xtensa-lx106-elf-(比如gcc是xtensa-lx106-elf-gcc),可以这样运行configure:
./configure \ --host=xtensa-lx106-elf \ CC=/opt/xtensa-lx106-toolchain/bin/xtensa-lx106-elf-gcc \ CXX=/opt/xtensa-lx106-toolchain/bin/xtensa-lx106-elf-g++ \ LD=/opt/xtensa-lx106-toolchain/bin/xtensa-lx106-elf-ld \ AR=/opt/xtensa-lx106-toolchain/bin/xtensa-lx106-elf-ar \ RANLIB=/opt/xtensa-lx106-toolchain/bin/xtensa-lx106-elf-ranlib
补充:如果configure仍不识别xtensa-lx106-elf
如果上面的命令还是报架构不识别的错误,你可以手动指定本地编译架构(也就是你当前运行configure的机器架构)。先运行项目里的config.guess获取本地架构:
./config.guess # 输出类似 x86_64-pc-linux-gnu 或者 aarch64-apple-darwin22
然后把这个结果作为--build参数传入:
./configure \ --build=x86_64-pc-linux-gnu \ --host=xtensa-lx106-elf \ CC=/opt/xtensa-lx106-toolchain/bin/xtensa-lx106-elf-gcc \ # 其他工具参数同上
方法二:通过环境变量预先设置工具链
如果你不想每次configure都写一大串参数,可以先把工具链的相关变量export到环境中:
# 设置工具链工具的绝对路径 export CC=/opt/xtensa-lx106-toolchain/bin/xtensa-lx106-elf-gcc export CXX=/opt/xtensa-lx106-toolchain/bin/xtensa-lx106-elf-g++ export LD=/opt/xtensa-lx106-toolchain/bin/xtensa-lx106-elf-ld export AR=/opt/xtensa-lx106-toolchain/bin/xtensa-lx106-elf-ar export RANLIB=/opt/xtensa-lx106-toolchain/bin/xtensa-lx106-elf-ranlib # 再运行configure ./configure --host=xtensa-lx106-elf
如果你的工具链bin目录不在系统PATH里,也可以先把它加入PATH,这样configure可能会自动找到带前缀的工具:
export PATH=/opt/xtensa-lx106-toolchain/bin:$PATH ./configure --host=xtensa-lx106-elf
不过这种方式依赖工具链的命名前缀符合configure的预期,不如直接指定工具路径可靠。
方法三:更新config.guess和config.sub文件
如果你的项目里的config.guess/config.sub版本太老,没有包含Xtensa LX106的架构识别,可以替换成支持该架构的新版本:
你可以从支持Xtensa的开源项目(比如ESP8266相关的SDK)获取这两个文件,替换掉当前项目根目录下的对应文件。替换后,通常只需要指定--host和工具链PATH就能正常运行configure了:
export PATH=/opt/xtensa-lx106-toolchain/bin:$PATH ./configure --host=xtensa-lx106-elf
额外提示:添加架构专属编译选项
有些Xtensa工具链需要指定特定的编译flag(比如-mlx106)来针对LX106架构优化,你可以在configure命令里通过CFLAGS和LDFLAGS传入:
./configure \ --host=xtensa-lx106-elf \ CC=/opt/xtensa-lx106-toolchain/bin/xtensa-lx106-elf-gcc \ CFLAGS="-mlx106 -Os" \ LDFLAGS="-mlx106"
内容的提问来源于stack exchange,提问作者Artium

