cmake 交叉编译错误|'_Float128'没有命名类型;您的意思是'_Float32x'吗?

busg9geu  于 2024-01-09  发布在  其他
关注(0)|答案(1)|浏览(733)

我在使用cmake交叉编译应用程序时遇到了一个问题。我使用基于外部Buildroot的SDK为其中一个项目进行交叉编译。它是基于“aarch64”的,我有其他基于“arm”的SDK,它们编译时没有任何错误。
使用cmake ../. -DCMAKE_TOOLCHAIN_FILE=[...]/ToolchainFile.cmake编译成功,它从C和CXX编译器的SDK获取正确的路径。但是当我运行make时,我得到以下错误:

  1. In file included from /opt/sdk_mmia53.e2c-demo.640/aarch64-buildroot-linux-gnu/sysroot/usr/include/wchar.h:30,
  2. from /opt/sdk_mmia53.e2c-demo.640/opt/ext-toolchain/aarch64-buildroot-linux-gnu/include/c++/9.4.0/cwchar:44,
  3. from /opt/sdk_mmia53.e2c-demo.640/opt/ext-toolchain/aarch64-buildroot-linux-gnu/include/c++/9.4.0/bits/postypes.h:40,
  4. from /opt/sdk_mmia53.e2c-demo.640/opt/ext-toolchain/aarch64-buildroot-linux-gnu/include/c++/9.4.0/bits/char_traits.h:40,
  5. from /opt/sdk_mmia53.e2c-demo.640/opt/ext-toolchain/aarch64-buildroot-linux-gnu/include/c++/9.4.0/string:40,
  6. from /root/sources/aarch64/aws-iot-client/lib/aws-iot-device-sdk-cpp/include/Action.hpp:27,
  7. from /root/sources/aarch64/aws-iot-client/lib/aws-iot-device-sdk-cpp/src/Action.cpp:26:
  8. /usr/include/x86_64-linux-gnu/bits/floatn.h:87:9: error: '__float128' does not name a type; did you mean '__cfloat128'?
  9. 87 | typedef __float128 _Float128;
  10. | ^~~~~~~~~~
  11. | __cfloat128
  12. In file included from /opt/sdk_mmia53.e2c-demo.640/opt/ext-toolchain/aarch64-buildroot-linux-gnu/include/c++/9.4.0/cwchar:44,
  13. from /opt/sdk_mmia53.e2c-demo.640/opt/ext-toolchain/aarch64-buildroot-linux-gnu/include/c++/9.4.0/bits/postypes.h:40,
  14. from /opt/sdk_mmia53.e2c-demo.640/opt/ext-toolchain/aarch64-buildroot-linux-gnu/include/c++/9.4.0/bits/char_traits.h:40,
  15. from /opt/sdk_mmia53.e2c-demo.640/opt/ext-toolchain/aarch64-buildroot-linux-gnu/include/c++/9.4.0/string:40,
  16. from /root/sources/aarch64/aws-iot-client/lib/aws-iot-device-sdk-cpp/include/Action.hpp:27,
  17. from /root/sources/aarch64/aws-iot-client/lib/aws-iot-device-sdk-cpp/src/Action.cpp:26:
  18. /opt/sdk_mmia53.e2c-demo.640/aarch64-buildroot-linux-gnu/sysroot/usr/include/wchar.h:406:8: error: '_Float128' does not name a type; did you mean '_Float32x'?
  19. 406 | extern _Float128 wcstof128 (const wchar_t *__restrict __nptr,
  20. | ^~~~~~~~~
  21. | _Float32x
  22. /opt/sdk_mmia53.e2c-demo.640/aarch64-buildroot-linux-gnu/sysroot/usr/include/wchar.h:523:8: error: '_Float128' does not name a type; did you mean '_Float32x'?
  23. 523 | extern _Float128 wcstof128_l (const wchar_t *__restrict __nptr,
  24. | ^~~~~~~~~
  25. | _Float32x
  26. In file included from /opt/sdk_mmia53.e2c-demo.640/opt/ext-toolchain/aarch64-buildroot-linux-gnu/include/c++/9.4.0/cstdlib:75,
  27. from /opt/sdk_mmia53.e2c-demo.640/opt/ext-toolchain/aarch64-buildroot-linux-gnu/include/c++/9.4.0/ext/string_conversions.h:41,
  28. from /opt/sdk_mmia53.e2c-demo.640/opt/ext-toolchain/aarch64-buildroot-linux-gnu/include/c++/9.4.0/bits/basic_string.h:6496,
  29. from /opt/sdk_mmia53.e2c-demo.640/opt/ext-toolchain/aarch64-buildroot-linux-gnu/include/c++/9.4.0/string:55,
  30. from /root/sources/aarch64/aws-iot-client/lib/aws-iot-device-sdk-cpp/include/Action.hpp:27,
  31. from /root/sources/aarch64/aws-iot-client/lib/aws-iot-device-sdk-cpp/src/Action.cpp:26:
  32. /opt/sdk_mmia53.e2c-demo.640/aarch64-buildroot-linux-gnu/sysroot/usr/include/stdlib.h:152:8: error: '_Float128' does not name a type; did you mean '_Float32x'?
  33. 152 | extern _Float128 strtof128 (const char *__restrict __nptr,
  34. | ^~~~~~~~~
  35. | _Float32x
  36. /opt/sdk_mmia53.e2c-demo.640/aarch64-buildroot-linux-gnu/sysroot/usr/include/stdlib.h:245:4: error: '_Float128' has not been declared
  37. 245 | _Float128 __f)
  38. | ^~~~~~~~~
  39. /opt/sdk_mmia53.e2c-demo.640/aarch64-buildroot-linux-gnu/sysroot/usr/include/stdlib.h:330:8: error: '_Float128' does not name a type; did you mean '_Float32x'?
  40. 330 | extern _Float128 strtof128_l (const char *__restrict __nptr,
  41. | ^~~~~~~~~
  42. | _Float32x
  43. In file included from /opt/sdk_mmia53.e2c-demo.640/opt/ext-toolchain/aarch64-buildroot-linux-gnu/include/c++/9.4.0/cstdlib:75,
  44. from /opt/sdk_mmia53.e2c-demo.640/opt/ext-toolchain/aarch64-buildroot-linux-gnu/include/c++/9.4.0/ext/string_conversions.h:41,
  45. from /opt/sdk_mmia53.e2c-demo.640/opt/ext-toolchain/aarch64-buildroot-linux-gnu/include/c++/9.4.0/bits/basic_string.h:6496,
  46. from /opt/sdk_mmia53.e2c-demo.640/opt/ext-toolchain/aarch64-buildroot-linux-gnu/include/c++/9.4.0/string:55,
  47. from /root/sources/aarch64/aws-iot-client/lib/aws-iot-device-sdk-cpp/include/Action.hpp:27,
  48. from /root/sources/aarch64/aws-iot-client/lib/aws-iot-device-sdk-cpp/src/Action.cpp:26:
  49. /opt/sdk_mmia53.e2c-demo.640/aarch64-buildroot-linux-gnu/sysroot/usr/include/stdlib.h:935:5: error: expected initializer before '__attr_access'
  50. 935 | __attr_access ((__read_only__, 2));
  51. | ^~~~~~~~~~~~~
  52. /opt/sdk_mmia53.e2c-demo.640/aarch64-buildroot-linux-gnu/sysroot/usr/include/stdlib.h:940:3: error: expected initializer before '__attr_access'
  53. 940 | __attr_access ((__write_only__, 1, 3)) __attr_access ((__read_only__, 2));
  54. | ^~~~~~~~~~~~~
  55. /opt/sdk_mmia53.e2c-demo.640/aarch64-buildroot-linux-gnu/sysroot/usr/include/stdlib.h:994:30: error: expected initializer before '__attr_access'
  56. 994 | __THROW __nonnull ((2)) __attr_access ((__write_only__, 2, 3));
  57. | ^~~~~~~~~~~~~
  58. In file included from /opt/sdk_mmia53.e2c-demo.640/opt/ext-toolchain/aarch64-buildroot-linux-gnu/include/c++/9.4.0/ext/string_conversions.h:41,
  59. from /opt/sdk_mmia53.e2c-demo.640/opt/ext-toolchain/aarch64-buildroot-linux-gnu/include/c++/9.4.0/bits/basic_string.h:6496,
  60. from /opt/sdk_mmia53.e2c-demo.640/opt/ext-toolchain/aarch64-buildroot-linux-gnu/include/c++/9.4.0/string:55,
  61. from /root/sources/aarch64/aws-iot-client/lib/aws-iot-device-sdk-cpp/include/Action.hpp:27,
  62. from /root/sources/aarch64/aws-iot-client/lib/aws-iot-device-sdk-cpp/src/Action.cpp:26:
  63. /opt/sdk_mmia53.e2c-demo.640/opt/ext-toolchain/aarch64-buildroot-linux-gnu/include/c++/9.4.0/cstdlib:154:11: error: '::mbstowcs' has not been declared
  64. 154 | using ::mbstowcs;
  65. | ^~~~~~~~
  66. /opt/sdk_mmia53.e2c-demo.640/opt/ext-toolchain/aarch64-buildroot-linux-gnu/include/c++/9.4.0/cstdlib:171:11: error: '::wcstombs' has not been declared
  67. 171 | using ::wcstombs;
  68. | ^~~~~~~~
  69. In file included from /opt/sdk_mmia53.e2c-demo.640/opt/ext-toolchain/aarch64-buildroot-linux-gnu/include/c++/9.4.0/cstdio:42,
  70. from /opt/sdk_mmia53.e2c-demo.640/opt/ext-toolchain/aarch64-buildroot-linux-gnu/include/c++/9.4.0/ext/string_conversions.h:43,
  71. from /opt/sdk_mmia53.e2c-demo.640/opt/ext-toolchain/aarch64-buildroot-linux-gnu/include/c++/9.4.0/bits/basic_string.h:6496,
  72. from /opt/sdk_mmia53.e2c-demo.640/opt/ext-toolchain/aarch64-buildroot-linux-gnu/include/c++/9.4.0/string:55,
  73. from /root/sources/aarch64/aws-iot-client/lib/aws-iot-device-sdk-cpp/include/Action.hpp:27,
  74. from /root/sources/aarch64/aws-iot-client/lib/aws-iot-device-sdk-cpp/src/Action.cpp:26:
  75. /opt/sdk_mmia53.e2c-demo.640/aarch64-buildroot-linux-gnu/sysroot/usr/include/stdio.h:569:12: error: expected initializer before '__attr_access'
  76. 569 | __wur __attr_access ((__write_only__, 1, 2));
  77. | ^~~~~~~~~~~~~
  78. /opt/sdk_mmia53.e2c-demo.640/aarch64-buildroot-linux-gnu/sysroot/usr/include/stdio.h:593:5: error: expected initializer before '__attr_access'
  79. 593 | __attr_access ((__write_only__, 1, 2));
  80. | ^~~~~~~~~~~~~
  81. In file included from /opt/sdk_mmia53.e2c-demo.640/opt/ext-toolchain/aarch64-buildroot-linux-gnu/include/c++/9.4.0/ext/string_conversions.h:43,
  82. from /opt/sdk_mmia53.e2c-demo.640/opt/ext-toolchain/aarch64-buildroot-linux-gnu/include/c++/9.4.0/bits/basic_string.h:6496,
  83. from /opt/sdk_mmia53.e2c-demo.640/opt/ext-toolchain/aarch64-buildroot-linux-gnu/include/c++/9.4.0/string:55,
  84. from /root/sources/aarch64/aws-iot-client/lib/aws-iot-device-sdk-cpp/include/Action.hpp:27,
  85. from /root/sources/aarch64/aws-iot-client/lib/aws-iot-device-sdk-cpp/src/Action.cpp:26:
  86. /opt/sdk_mmia53.e2c-demo.640/opt/ext-toolchain/aarch64-buildroot-linux-gnu/include/c++/9.4.0/cstdio:108:11: error: '::fgets' has not been declared
  87. 108 | using ::fgets;
  88. | ^~~~~
  89. In file included from /root/sources/aarch64/aws-iot-client/lib/aws-iot-device-sdk-cpp/include/Action.hpp:29,
  90. from /root/sources/aarch64/aws-iot-client/lib/aws-iot-device-sdk-cpp/src/Action.cpp:26:
  91. /opt/sdk_mmia53.e2c-demo.640/opt/ext-toolchain/aarch64-buildroot-linux-gnu/include/c++/9.4.0/memory: In function 'void* std::align(std::size_t, std::size_t, void*&, std::size_t&)':
  92. /opt/sdk_mmia53.e2c-demo.640/opt/ext-toolchain/aarch64-buildroot-linux-gnu/include/c++/9.4.0/memory:121:58: error: cast from 'void*' to 'uintptr_t' {aka 'unsigned int'} loses precision [-fpermissive]
  93. 121 | const auto __intptr = reinterpret_cast<uintptr_t>(__ptr);
  94. | ^
  95. make[2]: *** [lib/aws-iot-device-sdk-cpp/CMakeFiles/aws-iot-sdk-cpp.dir/build.make:66: lib/aws-iot-device-sdk-cpp/CMakeFiles/aws-iot-sdk-cpp.dir/src/Action.cpp.o] Error 1
  96. make[1]: *** [CMakeFiles/Makefile2:341: lib/aws-iot-device-sdk-cpp/CMakeFiles/aws-iot-sdk-cpp.dir/all] Error 2
  97. make: *** [Makefile:133: all] Error 2

字符串
我不明白这个错误的原因是什么,而它成功地为“arm”SDK构建。

  1. ToolchainFile.cmake
  1. # General CMAKE cross compile settings
  2. SET(CMAKE_SYSTEM_NAME Linux)
  3. SET(CMAKE_SYSTEM_PROCESSOR arm)
  4. SET(CMAKE_SYSTEM_VERSION 1)
  5. # Specify Sysroot path
  6. SET(CMAKE_SYSROOT /opt/sdk_mmia53.e2c-demo.640/aarch64-buildroot-linux-gnu/sysroot/)
  7. # Specify path to find filesystem items
  8. SET(CMAKE_FIND_ROOT_PATH /opt/sdk_mmia53.e2c-demo.640/aarch64-buildroot-linux-gnu/sysroot/)
  9. # Search for programs in the build host directories
  10. SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
  11. # Search for libraries and headers in the target directories
  12. set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
  13. set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
  14. set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
  15. # Specify toolchain directory
  16. SET(TOOLCHAIN_DIR /opt/sdk_mmia53.e2c-demo.640/bin/)
  17. # Specify cross compilation target
  18. SET(TARGET_CROSS aarch64-linux-)
  19. # Set compilers
  20. SET(CMAKE_CXX_COMPILER ${TOOLCHAIN_DIR}/${TARGET_CROSS}g++)
  21. # Set linker
  22. SET(CMAKE_LINKER ${TOOLCHAIN_DIR}/${TARGET_CROSS}ld)
  23. # Set compiler flags
  24. SET(CMAKE_CXX_FLAGS ${COMMON_FLAGS} -std=c++11)
  25. # Set archiving tool
  26. SET(CMAKE_AR ${TOOLCHAIN_DIR}/${TARGET_CROSS}ar CACHE FILEPATH "Archiver")
  27. # Set randomizing tool for static libraries
  28. SET(CMAKE_RANLIB ${TOOLCHAIN_DIR}/${TARGET_CROSS}ranlib)
  29. # Set strip tool
  30. SET(CMAKE_STRIP ${TOOLCHAIN_DIR}/${TARGET_CROSS}strip)
  31. # Set objdump tool
  32. SET(CMAKE_OBJDUMP ${TOOLCHAIN_DIR}/${TARGET_CROSS}objdump)
  33. # Set objcopy tool
  34. SET(CMAKE_OBJCOPY ${TOOLCHAIN_DIR}/${TARGET_CROSS}objcopy)
  35. # Set nm tool
  36. SET(CMAKE_NM ${TOOLCHAIN_DIR}/${TARGET_CROSS}nm)
  37. # Set THREADS_PTHREAD_ARG for testing threading
  38. SET(THREADS_PTHREAD_ARG "2" CACHE STRING "Forcibly set by ToolchainFile.cmake." FORCE)

的数据
CMakeCache.txt中,所有路径都是从SDK获取的,而不是从构建系统获取的
有人能告诉我如何解决这个问题吗?
你的帮助将不胜感激。
Thanks in advance
我用的是Ubuntu 20.04,如果有任何信息丢失,请告诉我。

unhi4e5o

unhi4e5o1#

x86_64-linux-gnu是您不希望在aarch64构建中看到的东西,但您使用x86_64-linux-gnu/bits/floatn.h
你需要弄清楚它是如何潜入的。你的SDK到底在哪里从它的目录中分离出来并使用一个非SDK头?

相关问题