问题标签 [linaro]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
gcc - GCC Linaro 交叉编译在 Windows 主机上的链接器步骤上失败
我想使用 GCC Linaro 工具链 7.4.1 版在 Windows 主机上构建一个 ARM 应用程序(只是一个简单的主要功能)。编译正常,我的 .o 文件已创建,但在链接步骤中出现以下错误(在不同的计算机上测试,结果相同)
错误从 locale.o 文件开始...但是 /home/tcwg-builds/.. 目录与我的计算机路径无关...
构建目标:arm_cpp 调用:Cross G++ Linker arm-eabi-g++ -o "arm_cpp" ./src/arm_cpp.o
c:/users/yunus/desktop/linarotoolchain/gcc_linaro_7/bin/../lib/gcc/arm- eabi/7.4.1/../../../../arm-eabi/lib\libstdc++.a(locale.o): 在函数get_locale_cache_mutex':
/home/tcwg-buildslave/workspace/tcwg-make-release_0/snapshots/gcc.git~linaro-7.4-2019.02/libstdc++-v3/src/c++98/locale.cc:36: undefined reference to
__sync_synchronize' c:/users/yunus/desktop/linarotoolchain/gcc_linaro_7/ bin/../lib/gcc/arm-eabi/7.4.1/../../../../arm-eabi/lib\libstdc++.a(locale_init.o):在函数(anonymous namespace)::get_locale_mutex()':
/home/tcwg-buildslave/workspace/tcwg-make-release_0/snapshots/gcc.git~linaro-7.4-2019.02/libstdc++-v3/src/c++98/locale_init.cc:66: undefined reference to
__sync_synchronize'c中: /users/yunus/desktop/linarotoolchain/gcc_linaro_7/bin/../lib/gcc/arm-eabi/7.4.1/../../../../arm-eabi/lib\libstdc++.a( cxx11-ios_failure.o):在函数(anonymous namespace)::__io_category_instance()':
/home/tcwg-buildslave/workspace/tcwg-make-release_0/snapshots/gcc.git~linaro-7.4-2019.02/libstdc++-v3/src/c++11/cxx11-ios_failure.cc:73: undefined reference to
__sync_synchronize' collect2.exe 中:错误:ld 返回 1 退出状态 make:*** [arm_cpp] 错误 1 “make all”以退出代码 2 终止。构建可能不完整。
yocto - Jetson Nano 和 Yocto/poky Zeus
我正在尝试使用最新的 Yocto 版本为我的 Jetson Nano 构建图像。为此,我需要 CUDA 10,它是 Jetson Nano 映像构建所需的 NVIDIA 二进制文件的一部分。
CUDA 10 只支持 GCC 7,所以为了让它工作,我使用 meta-linaro 层来添加一个外部工具链。我投入
在我local.conf
的并将 linaro 层添加到我的bblayers.conf
. 当我然后运行bitbake image-name
它然后失败并出现以下错误:
所以看起来AUTOREV
jdk bbfile中的用法有问题?关于如何解决这个问题的任何想法?
cygwin - u-boot在cygwin上交叉编译
我正在尝试在 cygwin 上为我的 arm 目标构建 u-boot。我拿了最新的 u-boot (2019.10) 我拿了最新的 linaro gnu-eabi 工具链。我发现的第一件事 - makefile 将“-ansi”标志添加到 cygwin 编译中,它失败了,如果删除这个标志,它可以编译。现在我发现我的编译器不知道它的 libgcc.a 在哪里。所以构建失败。如果有人有在 cygwin 上交叉编译 u-boot 的经验 - 请,我需要你的建议。怎么做?谢谢
c++ - std::chrono 在 arm 中的行为不同
因此,由于时间限制,我正在使用以下代码进行 hacky 生产修复。基本上我有一个从许多地方调用的静态函数,比预期的要多得多,它导致应用程序的另一部分阻塞。所以我想我会想出一个快速解决方案,将对过度工作函数的调用限制为每两秒一次。这在使用 clang 或 gcc 的 x86 中工作得很好。
2000 毫秒后打印 Check true。2000 毫秒后检查为真。2002 毫秒后检查为真。2005 毫秒后检查为真。……
if
但是,对于我们的 ARM 控制器,我使用 Linaro 7.1 进行了交叉编译,现在stmt的条件直到 10 秒后才满足。我很好奇,并与 1 秒而不是 2 秒(duration_cast
毫秒与秒没有任何改变)if(1 <= ....count())
进行比较,半秒后是真的。
这是 Linaro 编译器中的错误吗?或者我们的 ARM 控制器的时钟是否关闭?交叉编译标志-mcpu=cortex-a7 -mfloat-abi=hard -marm -march=armv7ve
是否有所作为
编辑:多线程,相同的输出。
c - 在交叉编译的可执行文件上运行 valgrind
我正在使用Ubuntu 18.04
VM 并试图找到一种valgrind
检查arm-Linux
可执行文件的方法。我试过用本地编译,gcc
但遇到了一些问题。可执行文件由项目提供的 Makefile 创建。我已经尝试过linaro emulator
,按照在线指南进行操作,但遇到了多个问题,我在网上搜索了每个问题的解决方案,但都失败了。我有什么办法valgrind
?
只要我可以检查程序是否存在内存泄漏,任何方式都可以。我现在执行 valgrind 时得到的结果:
valgrind:无法为平台“arm-linux”启动工具“memcheck”:没有这样的文件或目录
它自己的文件是 fyi:nrf52832_xxaa.out:ELF 32 位 LSB 可执行文件,ARM,EABI5 版本 1 (SYSV),静态链接,带有 debug_info,未剥离
我已经在多个帖子中搜索了解决方案,但找不到任何解决方案。
arm - 带有 std::pair 的 API在 ARM 上从 C++14 切换到 C++17 时中断?
从 C++14 升级到 C++17(Ubuntu 18.04,GCC 7.5.0)时,我们一直在努力解决这个非常奇怪的问题。该工具链是 Linaro 在 Jetson TX2 上的,是默认的。
背景:
我们有一个 C++ 应用程序,它使用我们在 Ubuntu 18.04 上开发的A
库中的算法。构建和广泛的系统测试已经运行了L
两年。Intel
Jetson TX2
现在我们决定升级到 C++17(-std=c++1z with GCC)。我们首先在启用 C++17 的情况下进行构建L
,起初一切似乎都运行良好,但后来我们注意到一些测试运行开始在 ARM 上出现奇怪的行为。就像 30 个测试中的 2 个测试一样,这是确定性的(!)。
然后我们开始调查并注意到库中的一个构造函数接受const std::pair<float, float> &
了某种损坏的数据。内部构造函数.first
似乎是.second
并且.second
总是0
。像这种奇怪的东西。
因此,如果A
仍在 C++14 上并且L
在 C++17 上,就会发生这种情况。
好的。
然后我们反过来尝试了这个。L
在 C++14 和A
C++17 上的应用程序。结果是相似的。一些测试开始失败(虽然不一样)并且它是确定性的。根本原因还是一样的:不知何故std::pair<float, float>
,API 搞砸了。
所以到目前为止的组合是这样的:
显然这是一个大型商业应用程序,所以我不能在这里复制粘贴代码。我首先怀疑这将是一个编译器错误(它仍然可能是),但它似乎太明显了!
还有更多:
我们最近还注意到,如果我们只用const std::pair<float, float> &
简单float
的参数替换 ,测试就会再次通过。
任何猜测到底是怎么回事?编译器错误?切换到 C++17甚至在理论上会导致这样的事情(编译器完全相同)?尤其是这样(升级哪个组件都没有关系)。
我们只是没有发现 API 有什么问题。它已经使用 C++14 在 Intel 和 ARM 上运行了将近两年,没有任何问题。
编辑:设法制作一个工作示例项目: https ://drive.google.com/open?id=1B5SceFB1mKkCnE8iE59Mq0lScK2F0iOl
说明和示例输出README.md
此示例在 Intel 和 Jetson TX2 上的输出:
linaro - Poky: Can't Build genericv8
I'm having a lot of trouble trying to build for aarch64 using the meta-linaro layer.
I'm pretty new to openembedded and have been able to build qemu images by following the Yocto Quick Start Guide but now I'm trying to do my own thing and failing. I just want a minimal image just to make sure it can build then I'll add options later but I'm having many different problems. I've tried using different branches including zeus, warrior, rocko, and master and end up with a different problem for each so I'm going to ask for help with warrior here.
Host Machine: Windows 10 using CROPS on docker.
The Error:
bblayers.conf:
local.conf: For brevity sake, I am using the automated local.conf with these changes:
c++ - 使用 Bazel 为 ARM 32 交叉编译 TensorFlow 1.15 时出错
我正在尝试在 ARM 板上安装 TensorFlow(我的平台是:)通过使用和编译器ODROID XU4
进行交叉编译。我已经完成了以下步骤:bazel
linaro
- 为 armeabihf 下载 Linaro 4.9.4
- 将此行添加到 WORKSPACE 文件
- 并创建 CROSSTOOL、BUILD 和 cross_toolchain_target_arm_linux_gnueabi_host_x86-64.BUILD 文件,如下所示:
- 手臂编译/构建:
- 手臂编译/交叉工具:
- 臂编译/cross_toolchain_target_arm_linux_gnueabi_host_x86-64.BUILD:
- 运行此命令:
不幸的是我在这个命令之后得到了错误,错误是:
我是交叉编译的初学者和困惑,请帮助和指导我。谢谢。
llvm - 无法使用 afl-clang-fast++ 交叉编译和链接源代码
我正在尝试使用 afl plus plus clang 编译器(llvm_mode)来模糊一个简单的 C++ 代码。我能够模糊代码并生成 ARM 目标文件,但链接时失败。我想我错过了一些链接器选项。任何帮助,将不胜感激
以下是我的命令:
root 和 sysroot 值如下
从输出中,我可以得出结论,在 Linaro 工具链的帮助下,编译正在进行但链接失败
输出:
c++ - Linaro 工具链无法创建 ARMv5 二进制文件
我正在尝试升级我的编译器以支持 C++11,我的目标机器的内核是 2.6.33.20。
为此,我尝试使用https://releases.linaro.org/components/toolchain/binaries/上的预构建二进制文件,即版本 5.5.0。
琐碎的测试程序
用命令编译得很好arm-linux-gnueabi-g++ -o test -static-libstdc++ -std=gnu++11 main.cpp
。
当我file
在可执行文件上执行时,它会输出test: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.3, for GNU/Linux 2.6.32, BuildID[sha1]=2d49dc2492f7fb2ee5992f7614604aac370e42f7, with debug_info, not stripped
.
file 命令在相同的源上运行,但使用旧的(C++ 11 之前)编译器编译产生:test: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.3, for GNU/Linux 2.6.14, not stripped
readelf -A
旧(工作)编译器的产量输出:
而新编译器生成的新编译器产生:
在此之后,我-mcpu=arm10tdmi
在上面的命令中添加了标志(导致arm-linux-gnueabi-g++ -mcpu=arm10tdmi -o test main.cpp
),但是 readelf 的输出仍然保持不变。使用 ARM 标志-march=arm5vt
并-mtune=arm10tdmi
导致完全相同的结果。
这表明编译器忽略了架构标志(或者可能不支持为 ARM5 构建)并坚持为 ARM7 构建。
我也尝试过工具链 4.9,但结果相同。
附带说明:Ubuntu 14.04 附带的 arm-linux-gnueabi-g++ 已知可以工作(支持 C++11),但是我似乎找不到将东西打包到要使用的文件夹中的方法作为可转移的工具链。
编辑:根据 old_timer 的输入,我使用命令将编译重定向到目标文件(main.o)arm-linux-gnueabi-g++ -mcpu=arm10tdmi main.cpp -c
在生成的目标文件上运行readelf -A
会产生以下输出:
但是,当我尝试使用 从中创建一个实际的可执行文件时arm-linux-gnueabi-g++ -mcpu=arm10tdmi main.o -o test
,readelf 输出返回到我在上面发布的 ARMv7 输出。
这表明编译器本身理解并使用 -mcpu 开关,但链接器随后继续并将其转换为 ARMv7 二进制文件。