问题标签 [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.
arm - 带有 uclinux 和 uclibc 的 Cortex-M3 上未处理的 MPU 故障
这是一个很难的问题,但我希望有人能提供帮助;)
这是我从最简单的应用程序中遇到的崩溃,它只调用 pthread_create():
这是我通过剖析应用程序从 objdump 得到的信息:
所以我们试图将值 0x5000 保存到地址 0xa001cff4 并且有一个异常:
所以它似乎是一个有效的物理 RAM 区域,地址 0xa001cff4 似乎也有效。现在这对我来说很奇怪,为什么在内核异常中它说大约 0x00000000 以及这个异常意味着什么。
另外我想说单线程应用程序运行良好,并且在为新线程分配堆栈期间遇到了这些 MPU 问题。但是我现在想了解的是 - 为什么是 MPU 故障以及它如何在有效地址上失败。
c - 打开目录失败。对于定义的数据类型,值太大
对于类似的问题,我已经尝试了堆栈溢出中的所有现有解决方案:大多数情况下建议声明_FILE_OFFSET_BITS
为64
。但这没有用。
示例代码:
以下是strerror(errno)
我尝试打开目录 ( ) 时遇到的错误 ( /data/system/dropbox
)。我在用uClibc
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) 代码
代码非常简单。
c - 使用 uclibc 和 gcc 针对 uclibc 编译的机器上的非标准路径中的自定义 glibc
我有带有 uClibc 的机器,并且我已经设法使用我制作的简单包装器让 glibc 对其进行工作。
它可以编译简单的程序,如 hello world,以及几乎任何其他 c 程序。
但是,当它们包含limits.h时,由于以下错误,它不会编译大多数gnu和其他程序
我需要做什么来解决这个问题?
bash - dst 是一个特殊的环境变量
我正在尝试在 OpenWRT 下构建代码。如果我有一个环境变量 [在网络共享上定义为 export dst=/projects//...],我发现 uClibc 编译会中断 [无法构建说 linux/errno.h 未找到]。
如果我将该环境变量的名称更改为 [到 pkdst] - 我没有看到该错误并且 OpenWRT 构建成功。
$dst 是 BASH 下的某种“特殊”外壳变量吗?
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 是否小于缓冲区大小。瓶颈是如何根据传递的指针找到缓冲区的大小。
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
linux - KLEE:关于内联汇编的意外错误
我最近在玩 KLEE。我按照文档“ Building KLEE (LLVM 3.4) ”成功运行了教程中的所有示例。
但是,当使用 KLEE 运行我自己的程序时:
发生了一些错误。(请参阅以下控制台输出)
我很好奇为什么会出现与 uclibc 相关的错误?因为我按照 KLEE 文档所说的那样编译它,并且在编译之前“配置” uclibc 时,我没有找到任何禁用汇编代码(例如 no-asm)的选项。
此外,我还注意到有很多关于“undefined reference to function: ...”的警告。我应该将相应的库编译为 llvm 位码而不是使用现有的共享对象吗?
谢谢!
c++ - 在 cmake 项目中使用替代 libc
我有一个使用 CMake 构建的 C/C++ 项目。在尝试编译静态二进制文件时,我在GLIBC
计算机和目标计算机上遇到了不同版本的问题。在关于 SO 的另一个问题中,对类似问题的公认答案是使用 libc 的替代实现,例如musl
or uClibc
。(见这里)
我找不到任何关于如何指出cmake
使用这种替代 libc 的信息。既没有提供FindMusl.cmake
文件,也无法在 Internet 上找到文件。简单地使用CC=/usr/bin/musl-gcc
是行不通的。
如何将我的 cmake 项目与此类替代 libc 实现静态链接,使其独立于 GLIBC?
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。
我不敢相信我是唯一一个有这个问题的人,我不想重新发明轮子。