自学内容网 自学内容网

在华为服务器上编译C++工程的若干错误以及排查方法和解决方法记录

目录

1 报错

2 查找错误原因

2.1 方法一:ldd命令

2.2 方法二:警告信息里面

3 解决错误

3.1 libpng16.so.16 和 libbrotlidec.so.1 问题

3.2 libdevmmap.so 和 libslog.so库问题

3.3 剩余错误

3.3.1 libacllite.so错误解决

3.3.2 libtaclstream_va.so.1.0.0错误解决


1 报错

编译某个项目的C++代码时提示

/usr/bin/ld: warning: libpng16.so.16, needed by /opt/chw/aclstream/3rdparty/freetype/lib/linux_lib/libfreetype.so.6, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libbrotlidec.so.1, needed by /opt/chw/aclstream/3rdparty/freetype/lib/linux_lib/libfreetype.so.6, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libdevmmap.so, needed by /opt/chw/aclstream/3rdparty/ascend/lib/linux_lib/libascend_hal.so, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libslog.so, needed by /opt/chw/aclstream/3rdparty/ascend/lib/linux_lib/libascend_hal.so, not found (try using -rpath or -rpath-link)
/opt/chw/aclstream/3rdparty/freetype/lib/linux_lib/libfreetype.so.6: undefined reference to `png_set_interlace_handling@PNG16_0'
/opt/chw/aclstream/3rdparty/freetype/lib/linux_lib/libfreetype.so.6: undefined reference to `png_get_io_ptr@PNG16_0'
/opt/chw/aclstream/3rdparty/freetype/lib/linux_lib/libfreetype.so.6: undefined reference to `png_set_longjmp_fn@PNG16_0'
/opt/chw/aclstream/3rdparty/ascend/lib/linux_lib/libascend_hal.so: undefined reference to `MapGetInRange'
/opt/chw/aclstream/3rdparty/ascend/lib/linux_lib/libascend_hal.so: undefined reference to `DlogErrorInner'
/opt/chw/aclstream/3rdparty/freetype/lib/linux_lib/libfreetype.so.6: undefined reference to `png_set_palette_to_rgb@PNG16_0'
../../lib/libtaclstream_va.so.1.0.0: undefined reference to `__aarch64_cas8_sync'
/opt/chw/aclstream/3rdparty/freetype/lib/linux_lib/libfreetype.so.6: undefined reference to `BrotliDecoderDecompress'
/opt/chw/aclstream/3rdparty/ascend/lib/linux_lib/libacllite.so: undefined reference to `std::condition_variable::wait(std::unique_lock<std::mutex>&)@GLIBCXX_3.4.30'
/opt/chw/aclstream/3rdparty/freetype/lib/linux_lib/libfreetype.so.6: undefined reference to `png_set_packing@PNG16_0'
/opt/chw/aclstream/3rdparty/freetype/lib/linux_lib/libfreetype.so.6: undefined reference to `png_read_end@PNG16_0'
/opt/chw/aclstream/3rdparty/freetype/lib/linux_lib/libfreetype.so.6: undefined reference to `png_error@PNG16_0'
/opt/chw/aclstream/3rdparty/ascend/lib/linux_lib/libascend_hal.so: undefined reference to `DlogWarnInner'
/opt/chw/aclstream/3rdparty/freetype/lib/linux_lib/libfreetype.so.6: undefined reference to `png_set_strip_16@PNG16_0'
../../lib/libtaclstream_va.so.1.0.0: undefined reference to `__aarch64_ldadd4_sync'
../../lib/libtaclstream_va.so.1.0.0: undefined reference to `__aarch64_swp4_sync'
/opt/chw/aclstream/3rdparty/freetype/lib/linux_lib/libfreetype.so.6: undefined reference to `png_set_tRNS_to_alpha@PNG16_0'
/opt/chw/aclstream/3rdparty/freetype/lib/linux_lib/libfreetype.so.6: undefined reference to `png_set_filler@PNG16_0'
../../lib/libtaclstream_va.so.1.0.0: undefined reference to `__aarch64_swp8_sync'
/opt/chw/aclstream/3rdparty/ascend/lib/linux_lib/libacllite.so: undefined reference to `pthread_join@GLIBC_2.34'
/opt/chw/aclstream/3rdparty/ascend/lib/linux_lib/libascend_hal.so: undefined reference to `MapInsert'
/opt/chw/aclstream/3rdparty/freetype/lib/linux_lib/libfreetype.so.6: undefined reference to `png_read_update_info@PNG16_0'
/opt/chw/aclstream/3rdparty/freetype/lib/linux_lib/libfreetype.so.6: undefined reference to `png_read_info@PNG16_0'
../../lib/libtaclstream_va.so.1.0.0: undefined reference to `std::__throw_bad_array_new_length()'
/opt/chw/aclstream/3rdparty/ascend/lib/linux_lib/libascend_hal.so: undefined reference to `DlogInfoInner'
/opt/chw/aclstream/3rdparty/ascend/lib/linux_lib/libascend_hal.so: undefined reference to `CheckLogLevel'
../../lib/libtaclstream_va.so.1.0.0: undefined reference to `std::__cxx11::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >::basic_ostringstream()'
/opt/chw/aclstream/3rdparty/freetype/lib/linux_lib/libfreetype.so.6: undefined reference to `png_set_gray_to_rgb@PNG16_0'
/opt/chw/aclstream/3rdparty/freetype/lib/linux_lib/libfreetype.so.6: undefined reference to `png_set_read_user_transform_fn@PNG16_0'
/opt/chw/aclstream/3rdparty/freetype/lib/linux_lib/libfreetype.so.6: undefined reference to `png_get_valid@PNG16_0'
/opt/chw/aclstream/3rdparty/ascend/lib/linux_lib/libacllite.so: undefined reference to `stat64@GLIBC_2.33'
/opt/chw/aclstream/3rdparty/ascend/lib/linux_lib/libacllite.so: undefined reference to `pthread_create@GLIBC_2.34'
/opt/chw/aclstream/3rdparty/freetype/lib/linux_lib/libfreetype.so.6: undefined reference to `png_get_error_ptr@PNG16_0'
/opt/chw/aclstream/3rdparty/freetype/lib/linux_lib/libfreetype.so.6: undefined reference to `png_destroy_read_struct@PNG16_0'
/opt/chw/aclstream/3rdparty/ascend/lib/linux_lib/libacllite.so: undefined reference to `__libc_single_threaded@GLIBC_2.32'
../../lib/libtaclstream_va.so.1.0.0: undefined reference to `__aarch64_cas4_sync'
/opt/chw/aclstream/3rdparty/ascend/lib/linux_lib/libascend_hal.so: undefined reference to `MapErase'
/opt/chw/aclstream/3rdparty/freetype/lib/linux_lib/libfreetype.so.6: undefined reference to `png_set_read_fn@PNG16_0'
/opt/chw/aclstream/3rdparty/freetype/lib/linux_lib/libfreetype.so.6: undefined reference to `png_set_expand_gray_1_2_4_to_8@PNG16_0'
/opt/chw/aclstream/3rdparty/ascend/lib/linux_lib/libascend_hal.so: undefined reference to `DlogDebugInner'
/opt/chw/aclstream/3rdparty/freetype/lib/linux_lib/libfreetype.so.6: undefined reference to `png_create_read_struct@PNG16_0'
/opt/chw/aclstream/3rdparty/ascend/lib/linux_lib/libacllite.so: undefined reference to `std::__throw_bad_array_new_length()@GLIBCXX_3.4.29'
/opt/chw/aclstream/3rdparty/freetype/lib/linux_lib/libfreetype.so.6: undefined reference to `png_get_IHDR@PNG16_0'
/opt/chw/aclstream/3rdparty/freetype/lib/linux_lib/libfreetype.so.6: undefined reference to `png_create_info_struct@PNG16_0'
/opt/chw/aclstream/3rdparty/freetype/lib/linux_lib/libfreetype.so.6: undefined reference to `fstat@GLIBC_2.33'
/opt/chw/aclstream/3rdparty/freetype/lib/linux_lib/libfreetype.so.6: undefined reference to `png_read_image@PNG16_0'
/opt/chw/aclstream/3rdparty/ascend/lib/linux_lib/libascend_hal.so: undefined reference to `DlogEventInner'
collect2: error: ld returned 1 exit status
make[2]: *** [app/CMakeFiles/app.dir/build.make:587: ../app/bin/app] Error 1
make[2]: Leaving directory '/opt/chw/aclstream/build'
make[1]: *** [CMakeFiles/Makefile2:321: app/CMakeFiles/app.dir/all] Error 2
make[1]: Leaving directory '/opt/chw/aclstream/build'
make: *** [Makefile:130: all] Error 2

这种undefined reference的错误肯定是少了某个库,有两种方法去看缺少哪个库,

2 查找错误原因

2.1 方法一:ldd命令

2.2 方法二:警告信息里面

从上面的警告信息就能看到

/usr/bin/ld: warning: libpng16.so.16, needed by /opt/chw/aclstream/3rdparty/freetype/lib/linux_lib/libfreetype.so.6, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libbrotlidec.so.1, needed by /opt/chw/aclstream/3rdparty/freetype/lib/linux_lib/libfreetype.so.6, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libdevmmap.so, needed by /opt/chw/aclstream/3rdparty/ascend/lib/linux_lib/libascend_hal.so, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libslog.so, needed by /opt/chw/aclstream/3rdparty/ascend/lib/linux_lib/libascend_hal.so, not found (try using -rpath or -rpath-link)

所以这很明显是缺少这几个库。

3 解决错误

3.1 libpng16.so.16 和 libbrotlidec.so.1 问题

这两个库可以看到都是libfreetype.so.6需要的,这让我想起来之前盒子上的libfreetype.so.6库是新的,而现在我在ARM服务器上这个libfreetype.so.6应该用旧的,所以我搜了下,

所以现在用的是6.18.1链接成libfreetype.so.6的,我只需要把libfreetype.so.6.14.0_backup链接成libfreetype.so.6即可。这样做之后上面两个错误消失。

3.2 libdevmmap.so 和 libslog.so库问题

这两个库我在华为ARM服务器上搜,直接就没有任何东西

然后我去华为盒子上搜

我发现他们的路径是 /usr/local/Ascend/driver/lib64/libdevmmap.so。那我感觉应该是因为这个华为服务器没有安装最新的驱动。

然后我去下载个昇腾710的最新驱动试试(华为老版本的驱动固件把310P称为710,现在同一都
是310系列了,所以我现在下载310P的)。

社区版-固件与驱动-昇腾社区

这里注意有顺序要求:先装固件再装驱动最后装cann。

然后用下面的命令安装驱动

Usage: ./Ascend-hdk-310p-npu-driver_23.0.rc3_linux-aarch64.run [options]
Options:
  --help | -h                       Print this message
  --info                            Print embedded info : title, default target directory, embedded script ...
  --list                            Print the list of files in the archive
  --check                           Checks integrity and version dependency of the archive
  --quiet                           Quiet install mode, skip human-computer interactions
  --nox11                           Do not spawn an xterm
  --noexec                          Do not run embedded script
  --extract=<path>                  Extract directly to a target directory (absolute or relative)
                                    Usually used with --noexec to just extract files without running
  --tar arg1 [arg2 ...]             Access the contents of the archive through the tar command
  --repack [package_name]           Build a precompiled kernel module for the currently running kernel and repack
                                    the .run file. The new .run file will be renamed to package_name or append
                                    the string \"-custom\" to its name when package_name not present.
  --repack-path=<path> [package_name]   Build a precompiled kernel module for the currently running kernel from
                                    path and repack the .run file. The new .run file will be renamed to
                                    package_name or append the string \"-custom\" to its name when
                                    package_name not present.
  --full                            Install full mode
  --run                             Install run mode
  --devel                           Install devel mode
  --docker                          Install docker mode
  --upgrade                         Upgrade product immediately
  --vnpu_guest                      Install vnpu_guest mode, eg: ./xxx.run --full/--run --vnpu_guest
  --install-path=<path>             Install to specific dir
  --install-username=<username>     Install to specific username
  --install-usergroup=<usergroup>   Install to specific usrgroup
  --uninstall                       Uninstall product
  --version                         Query the package version
  --install-for-all                 Install for all user
  --force                           Forcibly install, upgrade, or uninstall the package, and take effect after host restart
./Ascend-hdk-310p-npu-driver_23.0.rc3_linux-aarch64.run --full --force

驱动安装完之后需要重启才能生效。

 然后toolkit包我也直接重新下载

社区版资源下载-资源下载中心-昇腾社区

然后也重新安装

./Ascend-cann-toolkit_7.0.0.alpha003_linux-aarch64.run --full --force

3.3 剩余错误

../../lib/libtaclstream_va.so.1.0.0: undefined reference to `__aarch64_cas8_sync'
/opt/chw/aclstream/3rdparty/ascend/lib/linux_lib/libacllite.so: undefined reference to `std::condition_variable::wait(std::unique_lock<std::mutex>&)@GLIBCXX_3.4.30'
../../lib/libtaclstream_va.so.1.0.0: undefined reference to `__aarch64_ldadd4_sync'
../../lib/libtaclstream_va.so.1.0.0: undefined reference to `__aarch64_swp4_sync'
../../lib/libtaclstream_va.so.1.0.0: undefined reference to `__aarch64_swp8_sync'
/opt/chw/aclstream/3rdparty/ascend/lib/linux_lib/libacllite.so: undefined reference to `pthread_join@GLIBC_2.34'
../../lib/libtaclstream_va.so.1.0.0: undefined reference to `std::__throw_bad_array_new_length()'
../../lib/libtaclstream_va.so.1.0.0: undefined reference to `std::__cxx11::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >::basic_ostringstream()'
/opt/chw/aclstream/3rdparty/ascend/lib/linux_lib/libacllite.so: undefined reference to `stat64@GLIBC_2.33'
/opt/chw/aclstream/3rdparty/ascend/lib/linux_lib/libacllite.so: undefined reference to `pthread_create@GLIBC_2.34'
/opt/chw/aclstream/3rdparty/ascend/lib/linux_lib/libacllite.so: undefined reference to `__libc_single_threaded@GLIBC_2.32'
../../lib/libtaclstream_va.so.1.0.0: undefined reference to `__aarch64_cas4_sync'
/opt/chw/aclstream/3rdparty/ascend/lib/linux_lib/libacllite.so: undefined reference to `std::__throw_bad_array_new_length()@GLIBCXX_3.4.29'
collect2: error: ld returned 1 exit status
make[2]: *** [app/CMakeFiles/app.dir/build.make:587: ../app/bin/app] Error 1
make[2]: Leaving directory '/opt/chw/aclstream/build'
make[1]: *** [CMakeFiles/Makefile2:321: app/CMakeFiles/app.dir/all] Error 2
make[1]: Leaving directory '/opt/chw/aclstream/build'
make: *** [Makefile:130: all] Error 2

3.3.1 libacllite.so错误解决

这里面的这个库相关的报错,一看都是glibc相关的,那么感觉就是系统相关的,这让我想起来了这个库我没有重新编译,我用

ll /opt/chw/aclstream/3rdparty/ascend/lib/linux_lib/libacllite.so

看了下时间确实不对,那么这个库还是从华为盒子拷贝过来的版本,所以这里我去到/opt/chw/aclstream/3rdparty/ascend/acllite重新编译一下这个库,然后再次编译整个工程之后上面的libacllite.so相关的报错就没了。

3.3.2 libtaclstream_va.so.1.0.0错误解决

../../lib/libtaclstream_va.so.1.0.0: undefined reference to `__aarch64_cas8_sync'
../../lib/libtaclstream_va.so.1.0.0: undefined reference to `__aarch64_ldadd4_sync'
../../lib/libtaclstream_va.so.1.0.0: undefined reference to `__aarch64_swp4_sync'
../../lib/libtaclstream_va.so.1.0.0: undefined reference to `__aarch64_swp8_sync'
../../lib/libtaclstream_va.so.1.0.0: undefined reference to `std::__throw_bad_array_new_length()'
../../lib/libtaclstream_va.so.1.0.0: undefined reference to `std::__cxx11::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >::basic_ostringstream()'
../../lib/libtaclstream_va.so.1.0.0: undefined reference to `__aarch64_cas4_sync'
collect2: error: ld returned 1 exit status
make[2]: *** [app/CMakeFiles/app.dir/build.make:587: ../app/bin/app] Error 1
make[2]: Leaving directory '/opt/chw/aclstream/build'
make[1]: *** [CMakeFiles/Makefile2:321: app/CMakeFiles/app.dir/all] Error 2
make[1]: Leaving directory '/opt/chw/aclstream/build'
make: *** [Makefile:130: all] Error 2

我搜索undefined reference to `std::__cxx11::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >::basic_os找到

已解决: Re: icpx: error: linker command failed - Intel Community

然后按照他说的

sudo yum install libstdc++

然后报

我的centos上面的gcc最开始就是4.8.5的,然后我把gcc升级到了8.5.0,但是现在看libstdc++库并没有到8.5.0,还是老的,所以问题应该在这里。

cp /usr/local/lib64/libstdc++.so.6.0.25  /usr/lib64
cd /usr/lib64
ln -snf libstdc++.so.6.0.25 libstdc++.so.6

按照这个方法修改之后,问题依然存在,说明不是gcc版本的问题,然后这时候静下心来想一下,类似这种../../lib/libtaclstream_va.so.1.0.0: undefined reference to `__aarch64_swp8_sync'的错误其实可能问题并不在libtaclstream_va.so.1.0.0这个库,有可能是这个库他所依赖的其他库有问题,由于我的整个工程是从华为盒子拷贝到华为服务器的,所以可能就是libtaclstream_va.so.1.0.0依赖的一些库跟目前的华为服务器的一些库版本不太一样。

然后我突然想起来:/usr/bin/ld: /lib/aarch64-linux-gnu/libcairo.so.2: undefined reference to `FT_Done_MM_Var‘_libcairo undefined reference-CSDN博客

当初刚开始往盒子上面移植的时候,activeMQ这个库重新编译过,而现在直接把盒子上重新编译的库拷贝过来了,在华为服务器上库不匹配。

另外从这几个错误也能总结点经验:

1.很多时候报错在libtaclstream_va.so.1.0.0这个库,但是错误的原因可能是在另一个库。

2.如果库明明找到了,却还是提示未定义的东西,那很可能就是库不匹配。

参考文献:

/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21‘ not found (required by_libstdc++.so.6.0.25下载-CSDN博客

/usr/bin/ld: /lib/aarch64-linux-gnu/libcairo.so.2: undefined reference to `FT_Done_MM_Var‘_libcairo undefined reference-CSDN博客

推理部署指南,Atlas 800 推理服务器(型号:3000),昇腾软件升级指南,升级NPU驱动固件-快速部署8.0.RC1开发文档-昇腾社区


原文地址:https://blog.csdn.net/u013171226/article/details/139820221

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!