【发布时间】:2019-10-07 18:14:48
【问题描述】:
我使用面向 FPGA SoC 的英特尔嵌入式开发套件成功地为英特尔 Cyclone V SoC 构建了一个测试应用程序。此应用程序链接到一些目标系统特定的库。
由于 EDS 附带的 GCC 已经过时并且我需要更新的 C++ 功能,我想用我从 ARM 网站下载的here 的当前版本的 arm-linux-gnueabihf-g++ 编译整个东西。
使用最新的 GCC 编译与原始工具链构建良好的相同项目会导致很多错误,如下所示:
pathToNewGcc-ARM/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/../lib/gcc/arm-linux-gnueabihf/8.3.0/../../../../arm-linux-gnueabihf/bin/ld: intelFPGARootDir/18.1/hld/host/arm32/lib/libalteracl.so: undefined reference to `__cxa_end_catch@CXXABI_1.3'
pathToNewGcc-ARM/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/../lib/gcc/arm-linux-gnueabihf/8.3.0/../../../../arm-linux-gnueabihf/bin/ld: intelFPGARootDir/18.1/hld/host/arm32/lib/libalteracl.so: undefined reference to `std::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >::basic_stringstream(std::string const&, std::_Ios_Openmode)@GLIBCXX_3.4'
pathToNewGcc-ARM/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/../lib/gcc/arm-linux-gnueabihf/8.3.0/../../../../arm-linux-gnueabihf/bin/ld: intelFPGARootDir/18.1/hld/host/arm32/lib/libalteracl.so: undefined reference to `std::cerr@GLIBCXX_3.4'
pathToNewGcc-ARM/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/../lib/gcc/arm-linux-gnueabihf/8.3.0/../../../../arm-linux-gnueabihf/bin/ld: intelFPGARootDir/18.1/hld/host/arm32/lib/libalteracl.so: undefined reference to `operator delete(void*)@GLIBCXX_3.4'
libalteracl.so 是英特尔分发的目标系统特定库之一。显然这里有些东西不匹配,但是我不确定确切的问题是什么。所以,我需要解释一下如何解释这个错误以及可以做些什么来修复它们。
由于 cmets 提出了一些问题,这里有一些额外的信息
目标架构是双核 ARM Cortex A9。我在上面链接的 ARM 网站上使用硬浮点 (arm-linux-gnueabihf) 加载了 AArch32 目标下列出的 ARM。
构建由 CMake / CLion 完成。提取生成的 Compiler/Linker 调用如下:
编译:
pathToNewGcc-ARM/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++ -DCL_HPP_MINIMUM_OPENCL_VERSION=110 -DCL_HPP_TARGET_OPENCL_VERSION=200 -DJUCE_APP_CONFIG_HEADER=\"myProjectDir/JuceLibraryCode/AppConfig.h\" -DOPEN_CL_INTEL_FPGA -D_DEBUG=1 -IsomeFrameworkDir/JUCE/modules -IintelFPGARootDir/18.1/hld/host/include20 -g -std=gnu++11 -o CMakeFiles/HostApplication.dir/Source/Main.cpp.o -c myProjectDir/Source/Main.cpp
链接:
pathToNewGcc-ARM/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++ -g -LintelFPGARootDir/18.1/hld/board/de10_standard/arm32/lib -LintelFPGARootDir/18.1/hld/host/arm32/lib -LintelFPGARootDir/18.1/hld/host/arm32/lib -Wl,--no-as-needed -lalteracl -lintel_soc32_mmd -lstdc++ -lelf CMakeFiles/HostApplication.dir/Source/Main.cpp.o CMakeFiles/HostApplication.dir/JuceLibraryCode/include_juce_core.cpp.o -o HostApplication -lrt -ldl -lpthread
libalteracl.so 应该是 32 位库,因为整个目标架构是 32 位的
【问题讨论】:
-
看起来您使用的是 C 编译器而不是 C++ 编译器。如果您提供了一些源代码、编译/链接命令和实际输出,我们可以肯定地说。
-
libalteracl.so是 32 位库吗? -
按照@jww 的建议,我在原始问题中添加了 cmets 中要求的一些附加信息