问题标签 [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.
c++ - C++:ifstream getline 问题交叉编译成 OpenWRT 发行版
我正在尝试在我的自定义 OpenWRT 发行版中编译一个简单的 C++ 代码,但我的getline指令出错。
这是我的代码的快照:
我收到这种警告(我正在使用 -Werror 标志进行编译)
我不明白是什么问题。
在我的 OpenWRT 发行版上,我使用的是gcc 5.x和uClibc-0.9.33.2。
任何帮助表示赞赏。谢谢!
cross-compiling - 如何使用旧的 linux 内核头文件构建 GCC CC;构建根
我正在尝试使用 '09 的 buildroot 包构建交叉编译工具链。不幸的是,我没有在我的目标平台上升级现有的busybox系统的奢侈。
背景:目标平台运行在 arm926EJ(5TE 架构)上。它显然是用 uclibc 0.9.29 库构建的。平台上的内核 linux 头文件是 2.6.16
由于我无法从头开始升级busybox图像,我想制作单独的二进制文件并通过tftp上传它们,并通过telnet shell执行它们。
我已经成功编译了最新的带有 4.5 内核头文件和 1.0.14 uclibc 库的 buildroot 工具链。在成功编译了一个基本的 helloworld 程序并通过 tftp 将其上传到平台后,我能够执行该程序但没有看到任何输出。
尽管 stdout 和 telnet 终端可能存在一些问题,但我认为这很可能是 uclibc 库之间不同版本的兼容性问题。
问题:在我的主机系统上,我有来自 linux 版本 4.6.3 的 linux 内核头文件。为了解决上面提到的 uclibc 兼容性问题,我正在尝试从旧的 buildroot 包构建新的工具链。但是在编译的早期,我有一个错误指出:
Makefile:1601:混合隐式和普通规则:不推荐使用的语法 CHK include/linux/version.h HOSTCC 脚本/unifdef 脚本/unifdef.c:209:25 错误:'getline' 的类型冲突
等等在网上研究了一下并且已经预料到它会发生之后,这似乎是不同内核版本之间的冲突。
我正在向这个伟大的社区询问他们能想到的任何方法来解决这个问题,而不必使用古老版本的 linux 重建主机系统。如果有任何我遗漏或不完全理解的细节,请随时通知我。我非常愿意接受建议。
我考虑过使用 VM 中的旧标头构建主机系统。如果这是一个很好的方法,那么任何关于使用好的发行版的建议也会很酷。
我不反对放弃 buildroot 以获得更好的工具,或者从头开始构建 CC,但如果是这种情况,我仍然担心内核版本冲突。
任何帮助是极大的赞赏。
linux - 如何修改Buildroot包的源码进行包开发?
我一直在使用buildroot来使用uclibc构建工具链。现在,buildroot下载所有的包,解压并构建它们。
我想更改工具链的uclibc源,然后用新源重新编译工具链,我只是不明白如何以漂亮的方式完成它。
在它完成构建之后,所有提取的源代码都可以在“ <buildroot-src>/output/build ”中找到。但是更改它们不会给我任何东西,因为 buildroot 仅在构建期间将此目录用作中间目录。
所以我的想法是,也许更改uclibc包中的 .mk 文件并使其使用我修改过的源而不是下载和提取它(尚不确定是否可以在那里完成)但这似乎有点丑陋的解决方案..
所以我的问题是:有没有更好的方法告诉 buildroot 使用现有源构建包?
linux - 在 exit() 期间卸载 uClibc 共享库
我正在使用一个在初始化期间创建工作线程的共享库。该应用程序与 uClibc 链接。当它从 main() 返回时,它__pthread_cond_wait()
会在共享库未正确停止其 cleanup() 代码的工作线程中崩溃或类似情况。崩溃时的 main() 线程堆栈是:
由于我没有共享库的源代码,我无法修复工作人员清理代码,但我的问题是:
为什么一旦 uClibc 开始卸载共享库,线程仍在运行(崩溃)?_dl_munmap
我假设它正在从上面的堆栈条目中卸载它们。有没有办法确保 main() 退出时所有线程都暂停/停止?
android-ndk - 哪些(如果有)NDK 库/头文件与其他工具链兼容
我正在开发一个使用 arm-linux-musleabi 工具链编译的项目,该工具链针对 musl libc 构建。使用 Android jni.h 等 NDK 功能有哪些选择?假设 Android NDK 上的 jni.h 与针对实际 Java 的标准 jni.h 不同,我错了吗?我知道将项目移植到 NDK 可能是最好的方法,但让我们假设这对我来说是不可能的。换句话说,“使用 NDK 构建”不是一个选项,即使它是更明智的路径。另请注意,JNI 功能仅用作示例,此问题适用于任何可用作非 ndk 工具链的插件的 Android NDK c/c++ 库。
linux - 将 uclibc 链接器用于 glibc 编译的二进制文件?
我有一个二进制文件,我需要在使用 uclibc 的嵌入式系统上工作,该二进制文件是针对 glibc 编译的,这应该工作吗?
当我尝试运行它时,我收到一条错误消息,说二进制文件不存在,所以我检查了哪些库丢失了。
我能够将所有这些符号链接到我系统上的版本(旧版本,但我希望它能够工作,因为二进制文件不需要这些新版本):
ld-linux-x86-64.so.2
不存在(也没有任何库供我指向,例如ld-2.19.so
它在我的主机 PC 上指向的内容),这是一个 glibc 特定的链接器吗?我有/lib/ld64-uClibc.so.0/
//lib/ld64-uClibc-0.9.33.2.so
但是符号链接没有效果(仍然得到No such file or directory
),这是正确的做法还是我需要以ld-linux-x86-64.so.2
某种方式内置到系统中?
gcc - 交叉编译 uClibc 找不到一些 linux 内核头文件
这是一个快速描述,然后是详细信息。我尝试为 ARM EABI 交叉编译 uClibc。我有自己编译的 Linux 内核,并提取了头文件。我把它放在一个文件夹里。在 uClibc ".config" 文件中,我将变量 KERNEL_HEADERS= 设置为正确的文件夹。事实上,在编译过程中,会找到某个点的头文件。这是一个在中途发现并中断的示例:编译文件
“libc/inet/if_index.c”
该文件将在每个文件中生成一系列链式包含,如下所示:
“libc/inet/netlinkaccess.h”(这会执行以下 linux 标头的#include)
“kernel_hdr/linux/rtnetlink.h”(这个#include下一个)
“kernel_hdr/linux/netlink.h”(这个#include 用于下一个)
“kernel_hdr/linux/kernel.h”(这个尝试并失败了#include)
这就是#include <asm/types.h>
破坏链条的原因。这是第一个不是#include <linux/xxx.h>
but的<asm/xxx.h>
。文件 asm/types.h 存在但未找到。没有警告没有错误。它只是说
“错误:未知类型名称'__kernel_long_t'”
该类型在损坏的系列包含中定义。我什至放了一些很大的语法错误,看看它是否能读懂。没有!我认为处理内核标题文件夹结构识别存在问题。我尝试将内核头文件与 uClibc 常规头文件 (...uClibc/include/) 合并。无论我如何在 .config 文件中设置 KERNEL_HEADERS= (空路径或完整路径),我都会得到完全相同的行为。我不知道如何解决这个问题。
以下是有关我的设置的更多详细信息:
工作站:Ubuntu 16.04 LTS
uClibc 是 3 天前从 GIT 下载的最新版本
来自 Xilinx git 的 Linux 内核版本 4.9.0。(我在 Zynq Dual Cortex A9 上工作)
GCC ARM EABI 来自 Xilinx SDK 2017.1。
使用该工具链,我成功编译了自定义 FSBL(第一阶段引导加载程序)、自定义 Linux 内核(我跳过 u-boot,FSBL 直接加载内核)、设备树并打包整个东西,它在硬件上运行到 rootfs . 我现在正在构建一个自定义 rootfs(busybox 成功,dropbear 等),唯一的失败是我无法编译的这个 uClibc,因为它在某些头文件中找不到一些包含,尽管它们存在。
要构建 uClibc,我从 uClibc 文件夹中使用:
如何让 uClibc 构建找到所有内核头文件?
c - uClibc 是否仅用于基于 Linux 的操作系统?
uClibc(或 uClibc-ng)被称为嵌入式 Linux 系统的 C 库。该文档到处都引用了 Linux,并说该库针对 Linux 进行了非常仔细的优化。
虽然该库是专门开发用于 Linux 的,但它对其他系统也有用吗?将库与其他操作系统一起使用时是否需要了解任何限制?
c - 符合 POSIX 的操作系统通常会扩展 C 标准库的现有实现?
POSIX 声明操作系统需要提供以符合 POSIX的功能单元之一是POSIX_C_LANG_SUPPORT。基本上这是包含更多内容的整个 C 标准库。
我的问题很简单:兼容 POSIX 的操作系统的开发人员通常只需下载 C 标准库的开源版本(例如 glib 或 uClibc)并对其进行调整以适应 POSIX,或者他们从头开始实现一切?重写 C 库而不是仅仅选择一个非常知名的实现并根据我的需要进行调整是否有任何优势?
cross-compiling - 链接时对 std::to_string 的未定义引用
我正在尝试使用 uClibc 交叉编译一个程序,但在执行链接时,我总是收到一个错误,即未定义对 std::to_string 的引用。我已经应用了解决方法,这应该有助于解决这个问题:
这在构建 CXX 对象的阶段有所帮助,但在链接时问题又回来了。
这是错误:
感谢您的意见。