标签: uclibc

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

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

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

在我需要使用的系统上,__kernel_time_t定义为a long.这可能意味着64位时间没有内核工具.uClibc的版本是0.9.29.

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

c 32-bit uclibc embedded-linux year2038

23
推荐指数
2
解决办法
3294
查看次数

uclibc的任何可用的回溯移植?

我们在ARM 9上运行uclibc linux.问题是uclibc不支持回溯.当核心转储发生时,我无法获取调用堆栈.

有人有一个很好的解决方案吗?

例如,现有的uclibc回溯移植,或者在发生核心转储时获取调用堆栈的任何好方法(uclibc + ARM + Linux)?

linux arm stack-trace backtrace uclibc

10
推荐指数
1
解决办法
6121
查看次数

从x86交叉编译MIPS路由器

我的最终目标是为我的旧Actiontec调制解调器/路由器编译无线工具,以便将其配置为无线到以太网桥.目前它的无线功能(看似)由管理大部分Web界面的相同二进制文件控制,但看起来他们使用库无线工具在内部使用至少一些功能.

我以前从未为不同的CPU架构交叉编译,也不确定如何完全识别我需要做的事情.我正在尝试使用uClibc,因为它似乎在系统的其余部分使用,但我不知道如何为调制解调器环境配置buildroot.我根据来自下面的proc的信息最好地猜测了配置应该是什么,但有些错误,因为一个简单的C应用程序只返回0编译后它无法正常运行.

# cat /proc/version 
Linux version 2.4.17_mvl21-malta-mips_fp_le (root@localhost.localdomain) (gcc version 2.95.3 20010315 (release/MontaVista)) #1 Thu Apr 21 18:04:37 PDT 2005
# cat /proc/cpuinfo 
processor               : 0
cpu model               : MIPS 4KEc V4.8
BogoMIPS                : 149.91
wait instruction        : no
microsecond timers      : yes
extra interrupt vector  : yes
hardware watchpoint     : yes
VCED exceptions         : not available
VCEI exceptions         : not available
Run Code Online (Sandbox Code Playgroud)

linux embedded gcc mips uclibc

10
推荐指数
1
解决办法
2万
查看次数

GHC可以将二进制文件链接到libc实现,例如uclibc(默认情况下用于OpenWrt)吗?

我正在使用Debian/MIPS + QEMU来构建PortFusion的MIPS端口(TCP隧道解决方案).生成的二进制文件与GNU libc链接.因此,它们不能仅仅复制并用于带有uclibc而不是eglibc(看起来与GNU libc二进制兼容)的vanilla OpenWrt .


  • 有没有办法将Debian/MIPS上的Haskell/GHC二进制文件与uclibc而不是eglibc链接

  • OpenWrt使用uclibc是否真的为什么从Debian复制的PortFusion二进制文件无法运行的原因,-ash: binary not found或者这条消息可能是由于其他原因造成的?


有关使用Linux内核和CPU仿真的详细信息,请参阅https://github.com/corsis/PortFusion/wiki/MIPS-Buildshaskell-platform.


make当我尝试构建使用eglibc的自定义OpenWrt映像时,OpenWrt的GIT存储库的当前负责人失败了.

linker haskell glibc uclibc ghc

10
推荐指数
1
解决办法
624
查看次数

使用UCLIBC交叉编译PHP

这是一个已经存在的,以前的后期关闭,移动到服务器并再次关闭.我认为这篇文章是一个有效的stackoverflow问题,因为我认为它是由一些automake /编译/链接错误引起的.这是编程问题,而不是服务器管理问题.

交叉编译PHP

https://serverfault.com/questions/418521/cross-compile-php

开始发布

我已经下载了PHP 5.4.0源代码,将其解压缩并移动到源文件夹中.

我做配置:

./configure --build=x86_64-unknown-linux-gnu --host=arm-linux-uclibcgnueabi --prefix=/usr/arm/www CC="arm-linux-uclibcgnueabi-gcc --sysroot=/toolchains/gnu_cortex-a9_tools/"  --disable-libxml --disable-dom  --without-iconv --without-openssl --disable-simplexml --disable-xml --disable-xmlreader --disable-xmlwriter --without-pear --without-sqlite3 --disable-pdo --without-pdo-sqlite --disable-phar  --with-config-file-path=/etc/
Run Code Online (Sandbox Code Playgroud)

其次是

make
Run Code Online (Sandbox Code Playgroud)

没有错误,一切都运行良好.接下来我做一个make install.

make install
Run Code Online (Sandbox Code Playgroud)

一切都运行良好.我将它移动到目标平台并运行

/usr/arm/www/bin/php -v
PHP 5.4.0 (cli) (built: Aug 15 2012 16:07:41) 
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies
Run Code Online (Sandbox Code Playgroud)

我用我的网络服务器和php直接测试一个简单的主页.

<?php echo "hello" ?>
# php index.php
hello
Run Code Online (Sandbox Code Playgroud)

它按预期工作.接下来我测试:

<?php
$output = shell_exec('ls -lart');
echo "<pre>$output</pre>";
?>
Run Code Online (Sandbox Code Playgroud)

哦,不!

# …
Run Code Online (Sandbox Code Playgroud)

php linux arm glibc uclibc

9
推荐指数
1
解决办法
1517
查看次数

我可以在uclibc linux上使用boost吗?

有没有人有运行在基于uclibc的系统上使用boost库的C++应用程序的经验?它甚至可能吗?你会使用哪个C++标准库?uclibc ++可以与boost一起使用吗?

c++ linux boost uclibc uclinux

7
推荐指数
1
解决办法
4066
查看次数

使用uclibc时如何解决对fenv.h中函数的未定义引用?

我试图测试某些功能fenv.h,但是,当我编译如下功能LD失败,undefined reference to 'feclearexcept'undefined reference to 'fetestexcept'。我正在运行针对 uclibc 编译的强化 gentoo,我怀疑这至少在某种程度上是相关的

#include <stdio.h>      /* printf */
#include <math.h>       /* sqrt */
#include <fenv.h>      
#pragma STDC FENV_ACCESS on

int main ()
{
  feclearexcept (FE_ALL_EXCEPT);
  sqrt(-1);
  if (fetestexcept(FE_INVALID)) printf ("sqrt(-1) raises FE_INVALID\n");
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

fenv.h/usr/include. 中有静态和动态库 ( libm.a, libm.so) /usr/lib。我正在编译gcc -o test test.c -lm;有没有人知道为什么链接器找不到相关函数。似乎没有fenv.h相应的库。

更新:这篇十年前的博文似乎暗示 uclibc 不支持 fenv。我无法确定是否仍然是这种情况,但如果是这样,有什么可以做的。 http://uclibc.10924.n7.nabble.com/missing-fenv-h-for-qemu-td2703.html

c linux gcc floating-point-exceptions uclibc

7
推荐指数
1
解决办法
3648
查看次数

在cmake项目中使用替代libc

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

我找不到有关如何指向cmake使用此类替代libc的任何信息。FindMusl.cmake文件既没有寄出,也无法在互联网上找到。简单使用CC=/usr/bin/musl-gcc是行不通的。

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

c++ cmake libc uclibc musl

6
推荐指数
1
解决办法
2272
查看次数

获取 malloc 合并错误的示例程序

我想首先在我的电脑上测试 mcheck 功能以检测 malloc 合并错误。这样,我确信这将有助于解决嵌入式 Linux 机器上的类似崩溃问题。不幸的是,崩溃至少需要 3-4 天。因此,我正在寻找一个示例程序,该程序将生成类似的崩溃,如下所示。

 Program terminated with signal 6, Aborted.
#0  0x2c73ebb8 in __syscall_kill (pid=900, sig=6) at kill.c:15
15  static inline _syscall2(int, __syscall_kill, __kernel_pid_t, pid,
int, sig);
Current language:  auto; currently c
#0  0x2c73ebb8 in __syscall_kill (pid=900, sig=6) at kill.c:15
    __res = 716485696
    __err = 16
#1  0x2c73eb5c in kill (pid=900, sig=6) at kill.c:19
No locals.
#2  0x2aafb2e0 in pthread_kill (thread=900, signo=6) at signals.c:73
    handle = (pthread_handle) 0x2ab3f2e0
    pid = 900
#3  0x2aafbbb8 in raise …
Run Code Online (Sandbox Code Playgroud)

c malloc valgrind uclibc embedded-linux

5
推荐指数
1
解决办法
3万
查看次数

GCC 正在生成填充零的二进制文件

我试图弄清楚为什么 GCC 生成的二进制文件如此之大。

考虑这个空程序:

int main() {
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

现在我使用GCC 9.2.1 20190827 (Red Hat 9.2.1-1)glibc 2.29构建它,没有任何附加参数:

gcc -o test test.c

生成的二进制文件为 21984 字节 (~22 KB)。查看使用 生成的文件xxd,在多个地方有大量的空字节:

00000370: 006c 6962 632e 736f 2e36 005f 5f6c 6962  .libc.so.6.__lib
00000380: 635f 7374 6172 745f 6d61 696e 0047 4c49  c_start_main.GLI
00000390: 4243 5f32 2e32 2e35 005f 5f67 6d6f 6e5f  BC_2.2.5.__gmon_
000003a0: 7374 6172 745f 5f00 0000 0200 0000 0000  start__.........
000003b0: 0100 0100 0100 0000 1000 0000 …
Run Code Online (Sandbox Code Playgroud)

c gcc glibc uclibc musl

5
推荐指数
2
解决办法
263
查看次数