AXERA-TECH / ax-samples

Samples code for world class Artificial Intelligence SoCs for computer vision applications.
BSD 3-Clause "New" or "Revised" License
202 stars 43 forks source link

【已解决】编译报错提示:libax_run_joint.so 依赖 filesystem 相关函数 #20

Closed XiaotaoChen closed 2 years ago

XiaotaoChen commented 2 years ago

AX SDK版本: AX620_SDK_V0.31.0_P23_20220708101907_NO199 编译工具链和OPENCV根据编译教程下载, 没有将arm-linux-gnueabihf-gccarm-linux-gnueabihf-g++ 设置到系统PATH中,而是使用绝对路径;msp/out被放置在了3rdparty目录。 repo commit id:99b428e9e0

summary.make 输出

-- CMAKE_INSTALL_PREFIX = /home/chenxiaotao03/rv11091126/repositories/ax-samples/build/install
-- The C compiler identification is GNU 7.5.0
-- The CXX compiler identification is GNU 7.5.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /home/chenxiaotao03/resource/toolchain/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /home/chenxiaotao03/resource/toolchain/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- CMAKE_TOOLCHAIN_FILE = /home/chenxiaotao03/rv11091126/repositories/ax-samples/toolchains/arm-linux-gnueabihf.toolchain.cmake
-- AXERA: 32Bit target OS is detected. Assume 32-bit compilation mode.
-- Found OpenCV: /workspace/chenxiaotao03/rv11091126/repositories/ax-samples/3rdparty/opencv-arm-linux (found version "4.5.5")
--
--
-- Information Summary:
--
-- CMake information:
--   - CMake version:              3.23.2
--   - CMake generator:            Unix Makefiles
--   - CMake building tools:       /usr/bin/make
--   - Target System:              Linux
--   - Target CPU arch:            ARM
--   - Target CPU bus width:       32 Bit
--
-- AXERA-Samples toolchain information:
--   Cross compiling: TRUE
--   C/C++ compiler:
--     - C   standard version:     C
--     - C   standard required:
--     - C   standard extensions:
--     - C   compiler version:     7.5.0
--     - C   compiler:             /home/chenxiaotao03/resource/toolchain/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc
--     - C++ standard version:     C++
--     - C++ standard required:
--     - C++ standard extensions:
--     - C++ compiler version:     7.5.0
--     - C++ compiler:             /home/chenxiaotao03/resource/toolchain/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++
--   C/C++ compiler flags:
--     - C   compiler flags:
--     - C++ compiler flags:
--   OpenMP:
--     - OpenMP was found:         NO
--
-- AXERA-Samples building information:
--   - Project source path is:     /home/chenxiaotao03/rv11091126/repositories/ax-samples
--   - Project building path is:   /home/chenxiaotao03/rv11091126/repositories/ax-samples/build
--
-- AXERA-Samples other information:
--   Package install path:         /home/chenxiaotao03/rv11091126/repositories/ax-samples/build/install
--   Target platform:              ax620a
--
-- BSP_MSP_DIR: /home/chenxiaotao03/rv11091126/repositories/ax-samples/script/../3rdparty/msp/out
-- Configuring done
-- Generating done

make install 错误信息

[  2%] Building CXX object examples/CMakeFiles/ax_classification.dir/ax_classification_steps.cc.o
[  5%] Linking CXX executable ax_classification
/home/chenxiaotao03/rv11091126/repositories/ax-samples/script/../3rdparty/msp/out/lib/libax_run_joint.so: undefined reference to `std::experimental::filesystem::v1::__cxx11::path::_M_split_cmpts()'
/home/chenxiaotao03/rv11091126/repositories/ax-samples/script/../3rdparty/msp/out/lib/libax_run_joint.so: undefined reference to `std::experimental::filesystem::v1::create_directory(std::experimental::filesystem::v1::__cxx11::path const&)'
/home/chenxiaotao03/rv11091126/repositories/ax-samples/script/../3rdparty/msp/out/lib/libax_run_joint.so: undefined reference to `std::experimental::filesystem::v1::status(std::experimental::filesystem::v1::__cxx11::path const&)'
collect2: error: ld returned 1 exit status
examples/CMakeFiles/ax_classification.dir/build.make:111: recipe for target 'examples/ax_classification' failed
make[2]: *** [examples/ax_classification] Error 1
CMakeFiles/Makefile2:131: recipe for target 'examples/CMakeFiles/ax_classification.dir/all' failed
make[1]: *** [examples/CMakeFiles/ax_classification.dir/all] Error 2
Makefile:135: recipe for target 'all' failed
make: *** [all] Error 2

分析

该问题是ax_run_joint依赖stdc++fs的问题。在examples/CMakeLists.txt中问题脚本如下所示:

if (AXERA_TARGET_CHIP MATCHES "ax620a")   # ax620 support
        target_link_libraries (${name} PRIVATE pthread dl) # ax620a use this
        # target_link_libraries (${name} PRIVATE pthread dl stdc++fs) # ax620u use this
        target_link_libraries (${name} PRIVATE ax_run_joint ax_interpreter_external ax_interpreter ax_sys axsyslog)
    else()  # ax630a support
        target_link_libraries (${name} PRIVATE pthread dl stdc++fs)
        target_link_libraries (${name} PRIVATE ax_run_joint ax_interpreter_external ax_interpreter ax_sys)
    endif()

根据报错信息可知: ax_run_joint 依赖 stdc++fs库,将target_link_libraries (${name} PRIVATE pthread dl) # ax620a use this 换回下面注释的一行,依然报错,主要是因为cmake链接依赖库顺序的问题。脚本中将stdc++fs放在了ax_run_joint之前,导致ax_run_joint找不到stdc++fs. 经验证,将stdc++fs放在最后链接即可。另外,AX630没有编译,应该也存在类似问题。

BUG1989 commented 2 years ago

fixed it, and initial the build pipeline into CI #21