问题描述:

        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。
特殊说明以下configure参数,按如下配置,
--disable-mpeg 需要禁用,这个例程用不到,如果编译进去,例程编译会报错。

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服务器能多抗几年。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐