问题标签 [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.

0 投票
1 回答
1949 浏览

makefile - Buildroot 为 MIPS32 交叉编译 GDB 服务器

我正在尝试从MIPS32架构的源代码交叉编译 GDB 服务器的一个版本。我正在使用 x86_64 机器。

我正在为( )使用 BuildrootuClibc编译器。MIPSmips-buildroot-linux-uclibc-gcc

从 GDB 服务器目录我运行./configure命令:

拥有$CROSS价值mips-buildroot-linux-uclibc-

./configure运行,但我注意到它提到的输出中checking whether we are cross compiling... no。我似乎没有./configure意识到我正在尝试交叉编译。

然后我运行make LDFLAGS=-static它会产生错误:

我读到您可以删除lthread_dbGDB 服务器中的依赖项,makefile但是我需要调试线程应用程序。

如何MIPS32使用 Buildroot 交叉编译工具集为体系结构交叉编译 GDB 服务器?

0 投票
1 回答
1887 浏览

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.bz2gcc-4.9.4.tar.bz2linux-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. 这似乎是一个先有鸡还是先有蛋的问题。如何解决这个问题?

0 投票
1 回答
2284 浏览

docker - docker 容器运行镜像busybox的包管理器:uclibc

我想在我的一个正在运行的容器上安装 net-tools,该容器正在运行busybox:uclibc映像。但是这个图像没有像apt-getapk这样的包管理器。有没有办法做到这一点,或者我应该对我的形象进行更改?

0 投票
0 回答
71 浏览

c - strace观察时可执行程序多次加载动态库

我在 MIPS 中针对 uCLibc 库和许多其他动态共享库构建了一个复杂的可执行程序。该程序运行良好,但加载时间超过 20 秒,当我通过“strace”观察它时,我发现它不断打开和关闭一些基本库,如 libm、libc、libgcc 等。请在下面找到日志:

我确信这种持续的打开和关闭动作会减慢我的程序速度,我尝试在 /etc 下创建 ld.so.cache 但它不起作用,它仍然需要 20 秒才能加载。有人有想法吗?谢谢。

0 投票
1 回答
139 浏览

c++ - 使用 uclibc 编译删除的函数失败

我有一个项目要从 glibc 移植到 uclibc,但遇到了这个奇怪的问题。

为什么会出现这个错误?这是预期的行为吗?我读过的任何内容都没有表明 uclibc 不应该能够处理这个问题。

0 投票
0 回答
215 浏览

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.2libportaudio.so.2/usr/lib

没有骰子。我太笨了,无法理解 GCC 链接器路径,但我已经走到了这一步。谁能帮我解决这个交叉编译的雷区?

0 投票
0 回答
265 浏览

c++ - 如何用 musl 正确编译 uClibc++?

我需要用 uClibc++ 和 musl 编译 c++ 代码。为此,首先我必须重新编译 uClibc++。但是尝试这样做时,我遇到了一些错误,例如丢失__snprintf_chk__cxa_thread_atexit_impl

简而言之:您如何正确地做到这一点?我很确定这与 g++ 标志有关,但是哪个?

这是我迄今为止尝试过的(对于mips):

  1. 我为 mips 编译了 musl
  2. 将 musl-gcc 传递给CROSS_COMPILEuClibc++ make 的参数。我还在同一路径中创建了 musl-g++(这基本上与具有相同 .spec 文件的 musl-gcc 完全相同,但使用 mips-linux-gnu-g++ 而不是 gcc)我的.spec文件是 musl 自动生成的文件,我没摸。
  3. 这是我的编译命令:

    /li>

输出:

0 投票
2 回答
884 浏览

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工作?

0 投票
0 回答
785 浏览

c - 错误:编译 stdlib.h 时的未知类型名称“__float128”

尝试使用 uClibc 编译 tcpdump 包 编译 stdlib.h 时出现错误 错误:编译 stdlib.h 时出现未知类型名称 '__float128' 无法确定错误原因。我不知道我是否缺少任何依赖项。

0 投票
3 回答
360 浏览

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.0musl 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.0musl 1.1.23交叉编译的真实程序。例如,使用编译-Os和剥离的 tcpdump 二进制文件包含一个 32628 字节长的空字节连续运行。那么,为什么零试图消耗我所有的磁盘空间呢?