【问题标题】:undefined reference to `__strtof128_nan@GLIBC_PRIVATE'对 `__strtof128_nan@GLIBC_PRIVATE' 的未定义引用
【发布时间】:2020-04-21 23:49:43
【问题描述】:

我正在尝试将打包交叉编译为 glibc-2.19 附带的 debian-8 (jessie)。在交叉编译包时,它抛出了以下错误。

CMake Error at /usr/share/cmake-3.10/Modules/CMakeTestCXXCompiler.cmake:45 (message):
  The C++ compiler

    "/opt/jessiesdk-cxx/bin/i686-pc-linux-gnu-g++"

  is not able to compile a simple test program.

  It fails with the following output:

    Change Dir: /home/ach/ros2/ros2_core/build/ament_index_cpp/CMakeFiles/CMakeTmp

    Run Build Command:"/usr/bin/make" "cmTC_04f3a/fast"
    /usr/bin/make -f CMakeFiles/cmTC_04f3a.dir/build.make CMakeFiles/cmTC_04f3a.dir/build
    make[1]: Entering directory '/home/ach/ros2/ros2_core/build/ament_index_cpp/CMakeFiles/CMakeTmp'
    Building CXX object CMakeFiles/cmTC_04f3a.dir/testCXXCompiler.cxx.o
    /opt/jessiesdk-cxx/bin/i686-pc-linux-gnu-g++ --sysroot=/opt/jessiesdk-cxx/i686-pc-linux-gnu/sysroot     -o CMakeFiles/cmTC_04f3a.dir/testCXXCompiler.cxx.o -c /home/ach/ros2/ros2_core/build/ament_index_cpp/CMakeFiles/CMakeTmp/testCXXCompiler.cxx
    Linking CXX executable cmTC_04f3a
    /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_04f3a.dir/link.txt --verbose=1
    /opt/jessiesdk-cxx/bin/i686-pc-linux-gnu-g++ --sysroot=/opt/jessiesdk-cxx/i686-pc-linux-gnu/sysroot       CMakeFiles/cmTC_04f3a.dir/testCXXCompiler.cxx.o  -o cmTC_04f3a 
    /opt/jessiesdk-cxx/lib/gcc/i686-pc-linux-gnu/7.5.0/../../../../i686-pc-linux-gnu/bin/ld: /opt/jessiesdk-cxx/i686-pc-linux-gnu/sysroot/usr/lib/i386-linux-gnu/libm.so: undefined reference to `__strtold_nan@GLIBC_PRIVATE'
    /opt/jessiesdk-cxx/lib/gcc/i686-pc-linux-gnu/7.5.0/../../../../i686-pc-linux-gnu/bin/ld: /opt/jessiesdk-cxx/i686-pc-linux-gnu/sysroot/usr/lib/i386-linux-gnu/libm.so: undefined reference to `__strtof_nan@GLIBC_PRIVATE'
    /opt/jessiesdk-cxx/lib/gcc/i686-pc-linux-gnu/7.5.0/../../../../i686-pc-linux-gnu/bin/ld: /opt/jessiesdk-cxx/i686-pc-linux-gnu/sysroot/usr/lib/i386-linux-gnu/libm.so: undefined reference to `__strtod_nan@GLIBC_PRIVATE'
    /opt/jessiesdk-cxx/lib/gcc/i686-pc-linux-gnu/7.5.0/../../../../i686-pc-linux-gnu/bin/ld: /opt/jessiesdk-cxx/i686-pc-linux-gnu/sysroot/usr/lib/i386-linux-gnu/libm.so: undefined reference to `__strtof128_nan@GLIBC_PRIVATE'
    collect2: error: ld returned 1 exit status
    CMakeFiles/cmTC_04f3a.dir/build.make:97: recipe for target 'cmTC_04f3a' failed
    make[1]: *** [cmTC_04f3a] Error 1
    make[1]: Leaving directory '/home/ach/ros2/ros2_core/build/ament_index_cpp/CMakeFiles/CMakeTmp'
    Makefile:126: recipe for target 'cmTC_04f3a/fast' failed
    make: *** [cmTC_04f3a/fast] Error 2


  CMake will not be able to correctly generate this project.
Call Stack (most recent call first):
  CMakeLists.txt:3 (project)


---
Failed   <<< ament_index_cpp    [ Exited with code 1 ]

经过一番谷歌搜索,我找到了ABI Laboratory。这是否意味着我需要至少 2.26 的 glibc 才能编译包?

有没有办法解决这个问题?

谢谢..

【问题讨论】:

    标签: cross-platform cross-compiling glibc


    【解决方案1】:

    交叉编译器的设置方式有问题。 看起来您的 sysroot 包含一个较新的 libm 以及旧的 libc 的副本,用于 Debian jessie。

    __strtof128_nan@GLIBC_PRIVATE是glibc的libm库中的内部引用,用于调用libc库。这些内部引用只有在 libmlibc 是同一个 glibc 构建的一部分时才能正常工作。

    【讨论】:

    • 谢谢@Florian,你是对的。不确定,为什么我的一些库在交叉编译后指向我的“/usr/local/...”。
    猜你喜欢
    • 2021-09-29
    • 2018-07-24
    • 2011-03-27
    • 2022-01-22
    • 2016-04-04
    • 2015-11-03
    • 2011-08-11
    • 2019-07-22
    • 2015-07-20
    相关资源
    最近更新 更多