问题标签 [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.
yocto - 无法获取外部 Linaro 工具链版本错误
我正在尝试使用 Yocto-Arago SDK 构建 rootfs 并得到Failed to obtain external Linaro toolchain version
错误。
显然应该TARGET_PREFIX
有INVALID-oe-linux
。我已经绑定在 bitbake 运行之前将其导出,但没有成功。如何设置为这个值?
eclipse - 如何配置 linaro-gcc
现在我正在使用 gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabihf 并使用 eclipse 进行交叉编译。但是在构建时,我会收到类似的错误
任何人都可以帮我修复这个错误。/home/osboxes/artik5/opt/toolchains/gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/usr/li
我在b中找到 crt1.o、crti.o、libpthread.so.0 和 libpthread_nonshared.a
toolchain - 如何在 Windows 中安装 Linaro 工具链?
我在https://www.linaro.org/downloads/找到 Linaro 工具链
但是 tar.xz 格式的文件(例如 gcc-linaro-6.2.1-2016.11-i686-mingw32_arm-linux-gnueabihf.tar.xz )包含符号链接。
如何在 windows 中提取 .tar.xz ?
谢谢,
cygwin - Linaro gcc 在 Windows 上失败
我正在尝试在 Windows 上启动 gcc-linaro-7.3.1。
我已经从 Linaro 站点下载了 gcc-linaro-7.3.1-2018.05-i686-mingw32_aarch64-linux-gnu.tar,在 Cygwin 上使用 tar 提取,但是当我尝试运行“aarch64-linux-gnu-gcc.exe”时似乎什么也没发生。当我尝试从 Windows cmd 运行时,出现错误“应用程序无法正确启动 (0xc0000022)”。
有任何想法吗?
c++ - 针对特定 CXXABI 和 GLIBCXX 版本的交叉编译
我想为在 Linaro 14.04 上运行的 ARM 目标交叉编译软件。
当我使用 arm-linux-gnueabihf-g++ 从我的 Ubuntu 18.04 交叉编译并尝试在目标上运行它时,我收到此错误:
./main: /usr/lib/arm-linux-gnueabihf/libstdc++.so.6: 找不到版本‘CXXABI_1.3.9’(./main 需要)
./main: /usr/lib/arm-linux-gnueabihf/libstdc++.so.6: 未找到版本“GLIBCXX_3.4.21”(./main 需要)
我的问题是我无法升级目标上的任何库。
所以我的问题是,我可以在编译时指定特定版本的 GLIBC 和 CABI 吗?
非常感谢
alsa - Alsa Dmix 错误的采样率
我正在尝试在我的 Alsa conf 文件中添加一个 dix,但是当我使用它播放时,采样率是错误的(它太慢了)
我有以下内容:
当我将音频直接播放回硬件时,它播放得很好,但我确实在一开始就错过了一点。aplay -D hw:0,0 /usr/share/sounds/alsa/Front_Center.wav
当我使用我的 dsp0 / dmix 时,速度比它应该慢得多:aplay -D dsp0 /usr/share/sounds/alsa/Front_Center.wav
我究竟做错了什么?
c - 如何避免多重定义?链接器忽略了定义的符号,但有一些例外
我正在开发一个嵌入式系统,它有自己的库(例如libc_alt)从标准 libc (fopen、fclose、fread、fseek、ftell)实现一些功能,但不是全部(我需要memset、memcpy、longjmp、setjmp等)标准的libc)。当我尝试将两个库都提供给编译器时
提供libc_alt
提供标准库
在链接器步骤中,编译器 (arm-eabi-gcc) 正确地抱怨 fclose() 的多个定义。我的问题是,是否可以指示编译器排除标准 libc 定义 fclose() 并使用我在 $(COMP_PATH_libc_alt)/stdio.c 中编写的定义?
或者,我如何指示编译器先使用我的stdio.c,然后使用标准 libc 的 stdio.c而忽略重复的函数定义?
例如,在$(COMP_PATH_libc_alt)/stdio.c中找到 fopen() 定义之后;它将忽略标准 libc 中的 fopen()。这样我就可以同时使用 libc_alt fopen()和标准的 libc memcpy(), memset()
更新:谢谢大家的回答。@artless_noise 我之前确实放置了我的 stdio.c -lc
。关于使用--wrap symbol
,如果我理解正确,引用fclose()
将更改为__wrap_fclose()
,我需要将我fclose()
在stdio.c中的名称更改为__wrap__fclose()
; 不幸的是,修改“我的” stdio.c是不可能的。实际上,最奇怪的是,由于我将stdio.c 放在-lc 之前,LinaroGCC arm-eabi-gcc能够为fopen(), fseek(), ftell(), fread()
(nice) 选择我的定义。但它给出了multiple definition
错误fclose()
根据https://gcc.gnu.org/onlinedocs/gcc-4.7.0/gcc/Link-Options.html;上ld -l
; 链接器应该忽略-lc
在 my 之后出现的重复符号libc_alt.a
。它确实做到了,除了一个例外fclose()
,我不知道为什么?
在命令中编写此选项的位置有所不同;链接器按照指定的顺序搜索和处理库和目标文件。因此,在文件 foo.o 之后但在 bar.o 之前
foo.o -lz bar.o
搜索库。如果 bar.o 引用 中的函数,则可能不会加载这些函数。链接器在标准目录列表中搜索该库,该库实际上是一个名为 liblibrary.a 的文件。然后,链接器使用这个文件,就好像它已经按名称精确指定了一样。z
z
搜索的目录包括几个标准系统目录以及您使用 -L 指定的任何目录。通常以这种方式找到的文件是库文件——其成员是目标文件的归档文件。链接器通过扫描归档文件来处理归档文件,其中的成员定义了迄今为止已被引用但尚未定义的符号。但是如果找到的文件是一个普通的目标文件,它会以通常的方式链接。使用 -l 选项和指定文件名之间的唯一区别是 -l 用 and 包围库lib
并.a
搜索多个目录。
我如何调用链接器(libc_alt.a
包含“我的”stdio.o)
使用nm
我的内容libc_alt.a
使用nm
Linaro LinaroGCC arm-eabi-gcc 的内容 libc.a
c++ - 使用 CMake 和 SYSROOT 路径进行交叉编译的问题
当使用 CMake 交叉编译 ARM 可执行文件并在工具链文件中设置 CMAKE_SYSROOT 变量时,链接器不会自动查找其他库(显式链接到)所依赖的库,例如z
和glib
. 当不使用工具链文件(因此不交叉编译)时,这些不需要在 target_link_libraries() 中明确提及,但是当使用工具链文件时,它们会这样做,否则总是会出现无法找到的链接器错误。我想了解这是为什么。
我的环境的简要说明:
- 使用 Linux Ubuntu 16 编译运行 Ubuntu 18 的 arm 目标
- 从目标压缩并在开发系统上解压缩的根文件系统
- Linaro 交叉构建工具链 (7.4.1)
- 用于 cmake 的工具链文件,其中定义:CMAKE_SYSROOT、CMAKE_CXX_COMPILER、CMAKE_C_COMPILER 和 CMAKE_AR_COMPILER
- 编译器路径:/home/brian/workspace/ddpx_xcompile/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu
- 目标根文件系统的路径:/home/brian/workspace/ddpx_xcompile/ddpx-rootfs-05172019
我尝试了许多组合:设置 CMAKE_LIBRARY_PATH、link_directories 等。但是,唯一成功的选项似乎是在 target_link_libraries() 命令中添加以下内容z dl glib-2.0 pcre
:)
以下是错误消息的示例:
接下来是指定库中未定义函数的简短列表。这个错误是针对 的libdl.so.2 not found
,还有其他的。
我的错误输出:
我的 Cmake 工具链文件:
c++ - Rust 可执行文件与 C++ 动态库的 ABI 不兼容
我目前正在尝试将 Rust 可执行文件与用 C++ 和 C 编写的共享库链接。共享库的动态加载在 amd64 架构上完美运行,但是当可执行文件尝试加载共享库时,我遇到了分段错误错误aarch64 linux 机器 [Ubuntu 18.04.2 LTS (GNU/Linux 4.15.0-1033-raspi2 aarch64)]。
我正在使用 Linaro aarch64 工具链(http://releases.linaro.org/components/toolchain/binaries/latest-7/aarch64-linux-gnu/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu。 tar.xz)交叉编译共享库(C++ 和 C 代码的组合)。
在使用 file/readelf 检查时,生成的共享库具有 GNU/Linux ABI,这似乎是因为使用 g++ 在库中构建 C++ 代码,而 Rust 可执行文件的 ABI 是 SYSV(使用交叉编译为 aarch64 https://github.com/rust-embedded/cross项目)
我注意到手动编辑共享库的 .so 文件以将 ABI 标志从 GNU/Linux 更改为 SYSV 可以解决问题。
是否可以使可执行文件或库以特定 ABI 为目标?理想情况下,我想以某种方式构建 Rust 可执行文件,以便它可以链接到共享库,而与库的 ABI 无关。
为了提供简要概述,共享库是此头文件的实现: https ://github.com/Azure/iotedge/blob/master/edgelet/hsm-sys/azure-iot-hsm-c/inc/ hsm_client_data.h 我从链接存储库中保留了很多 C 实现代码,但修改了一些头文件的实现以使用 C++。
如果需要任何其他详细信息,请告诉我。
我尝试切换回旧版本的 g++ (4.9) 来构建 C 和 C++ 共享库,但它总是产生一个具有 GNU/Linux ABI 的工件。
这个问题被确定为这个问题的重复我可以从 Rust 代码中调用 C 或 C++ 函数吗?但是这些问题的答案并没有帮助解决我的问题,因为该帖子上的建议/答案表明可以通过传递 C '接口'来调用 C++,这正是我所拥有的。这个问题更多是针对特定目标架构(即 aarch64)的 ABI 不兼容问题。该问题不会在 amd64 目标架构上重现。
预期- Rust 可执行文件和使用 C 和 C++ 构建的动态共享库具有兼容 aarch64 的 ABI。
实际- Rust 可执行文件针对 SYSV ABI,而动态共享库针对 GNU/Linux ABI。