问题标签 [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.
makefile - Buildroot 为 MIPS32 交叉编译 GDB 服务器
我正在尝试从MIPS32
架构的源代码交叉编译 GDB 服务器的一个版本。我正在使用 x86_64 机器。
我正在为( )使用 BuildrootuClibc
编译器。MIPS
mips-buildroot-linux-uclibc-gcc
从 GDB 服务器目录我运行./configure
命令:
拥有$CROSS
价值mips-buildroot-linux-uclibc-
./configure
运行,但我注意到它提到的输出中checking whether we are cross compiling... no
。我似乎没有./configure
意识到我正在尝试交叉编译。
然后我运行make LDFLAGS=-static
它会产生错误:
我读到您可以删除lthread_db
GDB 服务器中的依赖项,makefile
但是我需要调试线程应用程序。
如何MIPS32
使用 Buildroot 交叉编译工具集为体系结构交叉编译 GDB 服务器?
c - MIPS GCC 交叉编译器构建失败:“找不到 -lc”
我正在尝试为QCA955X
基于 Linux 2.6.31 的路由器设置 GCC 4.9.4 交叉编译器。这是一个 MIPS32R2-abi CPU,它使用uClibc-0.9.30.1
(在 中找到)/lib
。因此,我决定用匹配的 uClibc 和binutils-2.19.1a
. 我的主机系统是带有 Linux 4.17-rc5 的 Ubuntu 18.04 和gcc version 7.3.0 (Ubuntu 7.3.0-16ubuntu3)
~/mips-cross-gcc/staging_dir
是我的前缀,~/mips-cross-gcc/staging_dir/sysroot
是我系统的临时 sysroot。
1) 我下载了binutils-2.19.1a.tar.bz2
、gcc-4.9.4.tar.bz2
、linux-2.6.31.9.tar.xz
和。uClibc-0.9.30.1.tar.bz2
~/mips-cross-gcc/sources
2)我解压了所有的来源。
3)安装linux头文件:
4)构建binutils:
5)构建“阶段1”gcc,引导uClibc:
6)安装uClibc头文件:
7)为目标arch构建libgcc:cd gcc-4.9.4 make all-target-libgcc
Libgcc 一直编译到最后的 libgcc_s 链接阶段:
我认为引导 aGCC
不需要 a libc
,因为它还没有被编译,对吧?我可能做错了什么?我会使用这个编译GCC
的来构建uClibc
,然后我会用我的新的再次编译 GCC,uClibc
这样我就可以交叉编译软件。在第一次构建中GCC
需要的事实似乎是错误的。libc
我尝试使用第一个gcc
而不编译libgcc
构建uClibc
,但几乎立即我收到:
因此,uClibc
需要libgcc
链接自己,而 gcc 需要libc
(任何类型,包括uClibc
)来链接自己的libgcc
. 这似乎是一个先有鸡还是先有蛋的问题。如何解决这个问题?
docker - docker 容器运行镜像busybox的包管理器:uclibc
我想在我的一个正在运行的容器上安装 net-tools,该容器正在运行busybox:uclibc映像。但是这个图像没有像apt-get或apk这样的包管理器。有没有办法做到这一点,或者我应该对我的形象进行更改?
c - strace观察时可执行程序多次加载动态库
我在 MIPS 中针对 uCLibc 库和许多其他动态共享库构建了一个复杂的可执行程序。该程序运行良好,但加载时间超过 20 秒,当我通过“strace”观察它时,我发现它不断打开和关闭一些基本库,如 libm、libc、libgcc 等。请在下面找到日志:
我确信这种持续的打开和关闭动作会减慢我的程序速度,我尝试在 /etc 下创建 ld.so.cache 但它不起作用,它仍然需要 20 秒才能加载。有人有想法吗?谢谢。
c++ - 使用 uclibc 编译删除的函数失败
我有一个项目要从 glibc 移植到 uclibc,但遇到了这个奇怪的问题。
为什么会出现这个错误?这是预期的行为吗?我读过的任何内容都没有表明 uclibc 不应该能够处理这个问题。
c - 尽管设置了 -L/usr/lib,但为 MIPS 交叉编译 PortAudio 失败并显示“找不到 -lasound”
我正在尝试编译一个示例 C 程序,该程序链接到 PortAudio,用于针对 MT7688 芯片的 MIPSEL OpenWRT 架构。
我的出发点是这个 351MB 的 Docker 镜像,它有一个工作的 MIPSEL GNU uclibc 工具链(运行source env.sh
以设置环境变量)。
起初我尝试交叉编译 PortAudio,但尽管为--host=mips-openwrt-linux-uclibc
. 所以我从我的 MIPS 设备复制了 working和文件libasound.so.2
,并将它们放在源文件夹和中,然后传递了显式包含和链接器路径:libportaudio.so.2
libportaudio.so.2
/usr/lib
没有骰子。我太笨了,无法理解 GCC 链接器路径,但我已经走到了这一步。谁能帮我解决这个交叉编译的雷区?
c++ - 如何用 musl 正确编译 uClibc++?
我需要用 uClibc++ 和 musl 编译 c++ 代码。为此,首先我必须重新编译 uClibc++。但是尝试这样做时,我遇到了一些错误,例如丢失__snprintf_chk
和__cxa_thread_atexit_impl
简而言之:您如何正确地做到这一点?我很确定这与 g++ 标志有关,但是哪个?
这是我迄今为止尝试过的(对于mips):
- 我为 mips 编译了 musl
- 将 musl-gcc 传递给
CROSS_COMPILE
uClibc++ make 的参数。我还在同一路径中创建了 musl-g++(这基本上与具有相同 .spec 文件的 musl-gcc 完全相同,但使用 mips-linux-gnu-g++ 而不是 gcc)我的.spec
文件是 musl 自动生成的文件,我没摸。 这是我的编译命令:
/li>
输出:
c - 没有源代码的 .so 文件的 GCC 链接
我正在尝试为 Axis A210(cris 架构)编译一个简单的“hello world”程序。我设法从供应商那里下载了 GCC,但它带有 glibc,并且相机运行的是 uClibc-0.9.27。我从设备中提取了文件/lib/libuClibc-0.9.27.so
。
我设法编译了这个有段错误的程序:
这个刚刚挂起的程序:
与cris-gcc -g -static -nostdlib -o compiled main.c
.
现在我想使用 libuClibc 中的函数,但我似乎无法让链接工作:我试过了
但这只是给出:
有没有办法链接到这个.so
文件或以其他方式获得一些标准功能,比如exit
工作?
c - 错误:编译 stdlib.h 时的未知类型名称“__float128”
尝试使用 uClibc 编译 tcpdump 包 编译 stdlib.h 时出现错误 错误:编译 stdlib.h 时出现未知类型名称 '__float128' 无法确定错误原因。我不知道我是否缺少任何依赖项。
c - GCC 正在生成用零填充的二进制文件
我试图弄清楚为什么 GCC 生成的二进制文件如此之大。
考虑这个空程序:
现在我使用GCC 9.2.1 20190827 (Red Hat 9.2.1-1)和glibc 2.29构建它,没有任何附加参数:
gcc -o test test.c
生成的二进制文件为 21984 字节 (~22 KB)。查看生成的文件xxd
,在多个地方有很长的空字节:
所以生成的二进制文件大约有 10 KB,或几乎一半,其中没有任何内容。
用 看size -A
,大小更像是人们对程序的期望,除了返回退出代码之外什么都不做:
当使用GCC 9.2.0和musl 1.1.23为 PowerPC 进行交叉编译时,情况更糟。二进制文件的大小增长到 67872 字节(~67 KB),用 看xxd
,有 64074 字节的连续运行,只有零。
不过,size -A
报告此版本的尺寸更小:
我还尝试使用旧版本的 GCC 编译程序,我碰巧有它:GCC 4.7.2 with uClibc 1.0.12。使用这种组合,生成的二进制文件只有 4769 字节 (~4 KB),并且其中没有明显的空字节运行。
为了确保这不仅仅发生在什么都不做的小程序上,我查看了一些我用GCC 9.2.0和musl 1.1.23交叉编译的真实程序。例如,使用编译-Os
和剥离的 tcpdump 二进制文件包含一个 32628 字节长的空字节连续运行。那么,为什么零试图消耗我所有的磁盘空间呢?