[RV1126B]:解决例程编译需要切换编译器的问题
问题描述:
RV1126B AI例程部分,modelzoo几个例程用到了2个编译器,不同例程编译过程中需要切换,避免切换,统一到aarch64-buildroot-linux-gnu
export GCC_COMPILER=/opt/atk-dlrv1126b-toolchain/bin/aarch64-buildroot-linux-gnu
export GCC_COMPILER=~/software/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu
问题解决:
由于前面安装了aarch64-buildroot-linux-gnu的编译器,linaro本身也是一个通用的arm编译器,就稳定性来说直接使用aarch64-buildroot-linux-gnu的编译器更好,毕竟是一个体系的。以whisper例程为例,进行修改。
export GCC_COMPILER=/opt/atk-dlrv1126b-toolchain/bin/aarch64-buildroot-linux-gnu
后,直接编译./build-linux.sh -t rv1126b -a aarch64 -d whisper
报错如下:
[ 91%] Linking CXX executable rknn_whisper_demo /opt/atk-dlrv1126b-toolchain/bin/../lib/gcc/aarch64-buildroot-linux-gnu/13.4.0/../../../../aarch64-buildroot-linux-gnu/bin/ld: /home/ccc/ai/rknn_model_zoo-2.3.2/3rdparty/fftw/Linux/aarch64/libfftw3f.a(assert.o): relocationR_AARCH64_ADR_PREL_PG_HI21 against symbol `stdout@@GLIBC_2.17' which may bind externally can not be used when making a shared object; recompile with -fPIC /opt/atk-dlrv1126b-toolchain/bin/../lib/gcc/aarch64-buildroot-linux-gnu/13.4.0/../../../../aarch64-buildroot-linux-gnu/bin/ld: /home/ccc/ai/rknn_model_zoo-2.3.2/3rdparty/fftw/Linux/aarch64/libfftw3f.a(assert.o)(.text+0x14): unresolvable R_AARCH64_ADR_PREL_PG_HI21 relocation against symbol `stdout@@GLIBC_2.17' /opt/atk-dlrv1126b-toolchain/bin/../lib/gcc/aarch64-buildroot-linux-gnu/13.4.0/../../../../aarch64-buildroot-linux-gnu/bin/ld: final link failed: bad value collect2: 错误: ld 返回 1 make[2]: *** [CMakeFiles/rknn_whisper_demo.dir/build.make:135:rknn_whisper_demo] 错误 1 make[1]: *** [CMakeFiles/Makefile2:124:CMakeFiles/rknn_whisper_demo.dir/all] 错误 2 make[1]: *** 正在等待未完成的任务.... [100%] Linking C static library libimageutils.a [100%] Built target imageutils make: *** [Makefile:130:all] 错误 2
问题原因:libfftw3f.a 是一个预编译的静态库,其没有使用 -fPIC 编译。
解决:下载fftw3f的最新代码,使用aarch64-buildroot-linux-gnu编译器和-fPIC 参数重新编译。
下载地址:http://www.fftw.org/
wget http://www.fftw.org/fftw-3.3.11.tar.gz
tar -xzf fftw-3.3.11.tar.gz
cd fftw-3.3.11
# 配置并编译(启用 fPIC 和单精度)
./configure \
--host=aarch64-buildroot-linux-gnu \
--enable-single \
--enable-shared \
--enable-static \
--with-pic \
CC=/opt/atk-dlrv1126b-toolchain/bin/aarch64-buildroot-linux-gnu-gcc \
--prefix=$(pwd)/_install
make -j$(nproc)
make install
将编译生成的libfftw3f.a(_install 目录下) 文件拷贝替换到 rknn_model_zoo-2.3.2/3rdparty/fftw/Linux/aarch64/libfftw3f.a
重新执行编译,再次报错:
报错信息同上,只是变了一个文件libsndfile.a,解决方法同上。
https://github.com/libsndfile/libsndfile/tree/1.2.2#libsndfile
github上下载libsndfile的源码,解压后使用aarch64-buildroot-linux-gnu编译器和-fPIC 参数重新编译。编译方法参考git上的README.MD。--disable-mpeg 需要禁用,这个例程用不到,如果编译进去,例程编译会报错。
特殊说明以下configure参数,按如下配置,
make clean
./configure --prefix=$(pwd)/_install \
CFLAGS="-fPIC" \
--host=aarch64-buildroot-linux-gnu \
--enable-static \
--disable-shared \
--disable-external-libs \
--disable-mpeg
make -j$(nproc)
make install
搞定这两个库就可以了,./build-linux.sh -t rv1126b -a aarch64 -d whisper 可以使用aarch64-buildroot-linux-gnu这个库顺利编译成功了。说明:fftw是做傅里叶变换的。libsndfile是一个通用音频文件库。
-----随便记录,方便后续用到查询时快速上手。希望ai时代的csdn服务器能多抗几年。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)