问题标签 [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 回答
261 浏览

arm - 带有 uclinux 和 uclibc 的 Cortex-M3 上未处理的 MPU 故障

这是一个很难的问题,但我希望有人能提供帮助;)

这是我从最简单的应用程序中遇到的崩溃,它只调用 pthread_create():

这是我通过剖析应用程序从 objdump 得到的信息:

所以我们试图将值 0x5000 保存到地址 0xa001cff4 并且有一个异常:

所以它似乎是一个有效的物理 RAM 区域,地址 0xa001cff4 似乎也有效。现在这对我来说很奇怪,为什么在内核异常中它说大约 0x00000000 以及这个异常意味着什么。

另外我想说单线程应用程序运行良好,并且在为新线程分配堆栈期间遇到了这些 MPU 问题。但是我现在想了解的是 - 为什么是 MPU 故障以及它如何在有效地址上失败。

0 投票
1 回答
728 浏览

c - 打开目录失败。对于定义的数据类型,值太大

对于类似的问题,我已经尝试了堆栈溢出中的所有现有解决方案:大多数情况下建议声明_FILE_OFFSET_BITS64。但这没有用。

示例代码:

以下是strerror(errno)我尝试打开目录 ( ) 时遇到的错误 ( /data/system/dropbox)。我在用uClibc

0 投票
2 回答
6846 浏览

linux - 如何在进程信号处理程序(armv7-uclibc)中获得正确的回溯?

我已经多次使用谷歌在信号处理程序中找到 backtrace() 的正确解决方案并尝试了几乎所有方法,但我无法在我的信号处理程序中成功获取回溯 - 这不是 SIGUSR1 处理程序。

  • 在 uclibc 配置中启用 UCLIBC_HAS_BACKTRACE=y 并编译它
  • 验证 libubacktrace.so 已创建
  • 使用以下选项编译我的应用程序二进制文件 -g -rdynamic -fexception 或 -funwind-tables
  • 二进制文件本身似乎被“剥离”了

但是,我无法从信号处理程序中获得完整的回溯。仅打印了我在信号处理程序中调用的函数地址。

如果我使用 target-gdb 二进制文件并使用 gdb --pid 命令附加该进程,我能够正确获得完整的回溯。

另外,我尝试了 pstack,但是(pstack-1.2 - 尝试了 arm-patch 但它太可怕了......没有打印)不是很有帮助。

有什么建议吗?


1) Makefile 中的编译器选项

CFLAGS += -g -fexceptions -funwind-tables -Werror $(WARN) ...

2) 代码

代码非常简单。

0 投票
1 回答
235 浏览

c - 使用 uclibc 和 gcc 针对 uclibc 编译的机器上的非标准路径中的自定义 glibc

我有带有 uClibc 的机器,并且我已经设法使用我制作的简单包装器让 glibc 对其进行工作。

它可以编译简单的程序,如 hello world,以及几乎任何其他 c 程序。

但是,当它们包含limits.h时,由于以下错误,它不会编译大多数gnu和其他程序

我需要做什么来解决这个问题?

0 投票
0 回答
123 浏览

bash - dst 是一个特殊的环境变量

我正在尝试在 OpenWRT 下构建代码。如果我有一个环境变量 [在网络共享上定义为 export dst=/projects//...],我发现 uClibc 编译会中断 [无法构建说 linux/errno.h 未找到]。

如果我将该环境变量的名称更改为 [到 pkdst] - 我没有看到该错误并且 OpenWRT 构建成功。

$dst 是 BASH 下的某种“特殊”外壳变量吗?

0 投票
1 回答
176 浏览

c - 如何在C-uclibc,Linux,mips中找到动态和静态指针指向的分配大小?

情况 - 我正在使用第三方堆栈。我有第三方的源代码。这段代码非常笨拙,并且存在很多与缓冲区溢出相关的问题。

我的解决方案——为了追查这个问题,我重写了现有的函数,如 sprintf 和 memcpy 来检查是否存在缓冲区溢出。

到目前为止,这是我为覆盖 malloc 和 sprintf 所做的工作。

接下来,我使用了 sprintf -

我的问题 - 我希望在缓冲区 - 目标容量较小时打印覆盖的函数,然后我们正在写入它。

我需要解决方案,它适用于堆栈分配的内存,如 char buff[5]; 和 char *buff = (char *) malloc(5);

因此,假设当我们对字符串大小为 6 字节的 buff 执行 memcpy 时,覆盖的 memcpy 应该会抛出错误。同样,当我们 sprintf 时,被覆盖的 sprintf 应该会抛出错误。主要问题是 sprintf。我想使用 snprintf 而不是 sprintf。很难查看每一段代码并更改为 snprintf。所以,我在这里要做的是用我的版本覆盖 sprintf 并在内部调用 snprintf,我将在其中根据 arg 的大小计算“n”。另外,我将比较 n 是否小于缓冲区大小。瓶颈是如何根据传递的指针找到缓冲区的大小。

0 投票
2 回答
3994 浏览

c - How to solve undefined reference to functions in fenv.h when using uclibc?

I'm trying to test some of the functions in fenv.h, however, when I compile the below function ld fails with undefined reference to 'feclearexcept' and undefined reference to 'fetestexcept'. I'm running hardened gentoo compiled against uclibc, and I suspect that this is at least somewhat related

fenv.h is in /usr/include. There are static and dynamic libraries (libm.a, libm.so) in /usr/lib. I am compiling with gcc -o test test.c -lm; does anyone have any ideas why the linker can't find the relevant functions. It seems like nothing in fenv.h has a corresponding library.

UPDATE: this decade old blog post seems to suggest that fenv is not supported by uclibc. I cannot determine if this is the case still, but if it were is there anything to be done. http://uclibc.10924.n7.nabble.com/missing-fenv-h-for-qemu-td2703.html

0 投票
1 回答
626 浏览

linux - KLEE:关于内联汇编的意外错误

我最近在玩 KLEE。我按照文档“ Building KLEE (LLVM 3.4) ”成功运行了教程中的所有示例。

但是,当使用 KLEE 运行我自己的程序时:

发生了一些错误。(请参阅以下控制台输出)

我很好奇为什么会出现与 uclibc 相关的错误?因为我按照 KLEE 文档所说的那样编译它,并且在编译之前“配置” uclibc 时,我没有找到任何禁用汇编代码(例如 no-asm)的选项。

此外,我还注意到有很多关于“undefined reference to function: ...”的警告。我应该将相应的库编译为 llvm 位码而不是使用现有的共享对象吗?

谢谢!

0 投票
2 回答
4542 浏览

c++ - 在 cmake 项目中使用替代 libc

我有一个使用 CMake 构建的 C/C++ 项目。在尝试编译静态二进制文件时,我在GLIBC计算机和目标计算机上遇到了不同版本的问题。在关于 SO 的另一个问题中,对类似问题的公认答案是使用 libc 的替代实现,例如muslor uClibc。(见这里

我找不到任何关于如何指出cmake使用这种替代 libc 的信息。既没有提供FindMusl.cmake文件,也无法在 Internet 上找到文件。简单地使用CC=/usr/bin/musl-gcc是行不通的。

如何将我的 cmake 项目与此类替代 libc 实现静态链接,使其独立于 GLIBC?

0 投票
3 回答
4700 浏览

c - 2038 年嵌入式 Linux(32 位)解决方案?

在 32 位嵌入式 Linux (ARMLinux) 的 C 代码中处理时间的正确方法是什么,以确保代码在 2038 年 1 月 19 日 03:14:07 UTC 之后继续正常工作(当有符号的 32 位time_t溢出时)?鉴于time_t在我必须使用的系统上是 32 位签名的,有哪些替代方案?

大量的谷歌搜索没有发现任何实际用途。每个人似乎都认为到那时我们都将使用 64 位操作系统,但这显然不适用于嵌入式系统。

在我需要使用的系统上,__kernel_time_t定义为long. 这大概意味着 64 位时间没有内核设施。uClibc 的版本是 0.9.29。

我不敢相信我是唯一一个有这个问题的人,我不想重新发明轮子。