问题标签 [uclibc]
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.
c - mips-linux-uclibc-gcc:找不到命令
如何配置我的 micro libc buildroot 以及如何使用它?我正在使用 802.11p 设备,这仍然让我感到困惑。我使用openwrt吗?
gab@ubuntu:~/Desktop/usr/src/locomate-release/mips/src$ 制作 mips-linux-uclibc-gcc -I /home/gab/Desktop/usr/src/locomate-release/mips/src/。 ./incs -I /home/gab/Desktop/usr/src/locomate-release/mips/src/../socket-CAN/include -I /home/gab/Desktop/usr/src/locomate-release/mips /src/../src -c -DLOCOMATE -DSDK_NEW -o wsmpdemo.o wsmpdemo.c make: mips-linux-uclibc-gcc: Command not found make: * [wsmpdemo.o] Error 127 gab@ubuntu:~/桌面/usr/src/locomate-release/mips/src$ ^C gab@ubuntu:~/Desktop/usr/src/locomate-release/mips/src$
c - 拦截LibC函数调用,有可能吗?
我有一个来自供应商的动态库(没有可用的源代码)。该库与 uCLibC 链接。
如果我将我的应用程序链接到这个库,我可以拦截这个库可能对 uclibc/libc 执行的一些调用(例如 malloc、printf、...)吗?例如,我想修改这个库正在使用的 printf。
谢谢。
gcc - GCC 对 uclibc 的支持
'man gcc' 为不同平台和架构描述了许多与机器相关的选项,但我不明白 '-muclibc' 的用途,因为它是在 GNU/Linux 选项下定义的,但不是特定的硬件。
有人可以提供更多细节吗?
谢谢。
linux - uClibc vfork() 导致分段错误
我正在使用 armv7 进行 openwrt 开发并面临由 vfork 引起的段错误。
我编写了一个包含以下部分的小型测试程序:
vfork() 函数总是导致段错误,这是 gdb 调试跟踪:
我还在 vfork.S 找到了 vfork 代码:__vfork:
更多信息 - 当像这样绕过 vfork 时 -
一切似乎都很好。
谢谢大家的帮助!
c++ - 奇怪的编译器行为
我正在尝试编译我的项目,它使用了 boost。我的主要整数类型是 aint32_t
和int64_t
from sys/types.h
。如果我使用主机系统编译器(GCC 4.8.3,x86_64)编译项目,进程成功完成并且二进制文件是正确的工作,但是如果我尝试使用外部工具链(GCC 4.3.5,armv5te)交叉编译到 ARM 进程中断上
我不使用using namespace boost
我如何编译提升:
linux - 需要在 buildroot 中为主机构建 automake
我刚刚升级到最新版本的 buildroot。在 buildroot 完成后使用以前的版本,我会在我的 uclibc/usr/bin 中看到 automake/autoconf。但是使用最新版本的 buildroot ( 2014 ),我再也看不到了。
谁能让我知道如何添加仅为主机构建的软件包?即我想在输出/构建文件夹中查看主机包
谢谢
linux - 指定在 Linux 上启动可执行文件时要使用的动态链接器/加载器
我有一个奇怪的 Linux 系统,其中大部分软件都是针对 Glibc 编译的,而其他一些软件则是针对 uClibc 编译的。
因为当我启动和执行时 Linux 是标准发行版,所以从 glibc 调用标准动态链接器(/lib/ld.so.1)。
我正在寻找一种在启动任何可执行文件之前指定动态加载器的方法,因此当我想运行针对 uClibc 编译的软件时,我可以定义启动机制以使用 uClibc 动态加载器(/lib/ld-uClibc.so.0 )。
有任何想法吗?
security - 为什么 uClibc UCLIBC_BUILD_NOEXECSTACK 实际上不使用链接器标志 -Wl,-z,noexecstack
一种现代 Linux 安全强化策略是使用选项编译和链接代码-Wl,-z-noexecstack
,这将 DLL 或二进制文件标记为不需要可执行堆栈。可以使用readelf
或其他方式检查这种情况。
我一直在使用 uClibc 并注意到它会生成没有设置此标志的对象(.so 文件)。然而 uClibc 有一个配置选项UCLIBC_BUILD_NOEXECSTACK
,根据帮助意味着:
在深入研究 Makefile 时,这是正确的 - 该标志仅适用于汇编程序。
因为标志只传递给汇编器,这是否意味着 uClibc 开发人员错过了一个重要的强化标志?还有其他选项,例如UCLIBC_BUILD_RELRO
确实会导致将等效标志添加到链接器(as -Wl,-z,relro
)
然而,一个不经意的观察者很容易误读这一点,并假设,正如我最初所做的那样,这UCLIBC_BUILD_NOEXECSTACK
实际上是在标记 .so 文件,而实际上并非如此。例如,OpenWRT 确保在构建 uClibc 时设置该标志。
为什么 uClibc 不会以“通常”的方式做事?我在这里想念什么?这些库(例如 librt.so、libpthread.so 等)实际上不是 NX 吗?
编辑
我能够使用 Makefiles 并通过使用-Wl,-z,noexecstack
参数获得 noexecstack 位。那么他们为什么不使用它呢?
clang - 如何使用 Clang 交叉编译源代码?
我在我的主机(Ubuntu 12.04 LTS)中安装了 clang 3.4,并尝试交叉编译一个简单的 C++11 程序以在 mips32r1(little endian)+ uclibc 环境中执行。
在尝试交叉编译时,我遇到了错误,(附加了详细的输出)
似乎clang正在尝试调用系统汇编程序而不是跨工具链的汇编程序。无论如何将汇编程序设置为铿锵声?
EDIT(1) - 添加参考链接
embedded - 如何使用 arm2010q1 工具链在 buildroot 上为 ucLinux 构建 FLAT 用户空间二进制文件
我有一个基于 ucLinux 内核 2.6.33 的不带 MMU 的 cortex-M3 的 buildroot 系统。内核中启用了对 FLAT、ZFLAT、SHARED_FLAT 的支持。在 buildroot 内部,所有内容都设置为 M3 等。我有一个带有工作内核和 busybox 的工作系统(在用户空间中只能是二进制文件)。系统或任何其他库上没有 uClibc。我正在尝试像这样构建最简单的用户空间应用程序:main(){}
我尝试了不同的标志。最新的组合是这样的:
^[[7m>>> zpm_t 1.0 构建^[[27m /usr/bin/make -j5 FLAGS="-c -mthumb -march=armv7 -mfix-cortex-m3-ldrd" EXTRA_LDFLAGS="-Wl,-elf2flt ,--static" CC="/mnt/repos/repos/github/nocturn_buildroot/output/host/usr/bin/ccache /mnt/repos/repos/github/nocturn_buildroot/output/host/usr/bin/arm-uclinuxeabi -gcc" LD="/mnt/repos/repos/github/nocturn_buildroot/output/host/usr/bin/arm-uclinuxeabi-ld" HEADERS="-I/mnt/repos/repos/github/nocturn_buildroot/output/target /usr/include/SDL" LIBS="-L/mnt/repos/repos/github/nocturn_buildroot/../nocturn_tools/arm-2010q1/arm-uclinuxeabi/libc/usr/lib" -C /mnt/repos/repos /github/nocturn_buildroot/output/build/zpm_t-1.0 all make[1]:进入目录/mnt/repos/repos/github/nocturn_buildroot/output/build/zpm_t-1.0'
/mnt/repos/repos/github/nocturn_buildroot/output/host/usr/bin/ccache /mnt/repos/repos/github/nocturn_buildroot/output/host/usr/bin/arm-uclinuxeabi-gcc -c -mthumb -march=armv7 -mfix-cortex-m3-ldrd -I/mnt/repos/repos/github/nocturn_buildroot/output/target/usr/include/SDL t.c
/mnt/repos/repos/github/nocturn_buildroot/output/host/usr/bin/ccache /mnt/repos/repos/github/nocturn_buildroot/output/host/usr/bin/arm-uclinuxeabi-gcc -Wl,-elf2flt,--static t.o -L/mnt/repos/repos/github/nocturn_buildroot/../nocturn_tools/arm-2010q1/arm-uclinuxeabi/libc/usr/lib -o t
make[1]: Leaving directory
/mnt/repos/repos/github/nocturn_buildroot/output/build/zpm_t-1.0'
平面文件似乎没问题:
但是在系统上我总是有一个不那么有用的段错误:
我错过了什么?这应该是非常简单的事情。另外 - 如何处理 uClibc?它应该被编译成每个二进制可执行文件还是我应该以某种方式将它放在系统上?