Articles of glibc

基于Qt的应用程序二进制兼容性问题,由于glibc版本

我在使用glibc 2.15的ubuntu 12.04 LTS上开发和构build基于QT的应用程序。 应用程序的二进制版本在一些Linux发行版上运行,但不在其他版本上运行。 其中一个主要问题是不同版本的glibc与不同的linux发行版所引起的兼容性问题。 例如,它不适用于使用glibc 2.12的centos或使用glibc 2.10的警惕小狗。 有没有办法在Ubuntu 12.04 LTS上构build一个更低版本的glibc的QT? 还是必须切换到较低版本的Ubuntu才能完成所有的开发?

单声道3.2.3需要更新版本的glibc

我正在使用Red Hat并尝试从http://download.mono-project.com/archive/3.2.3/linux/x64/安装最新的Mono版本。 我用下面的命令尝试安装mono核心: sudo yum install http://download.mono-project.com/archive/3.2.3/linux/x64/mono-core-3.2.3-0.x86_64.rpm 以下是我的错误消息: Error: Package: mono-core-3.2.3-0.x86_64 (/mono-core-3.2.3-0.x86_64) Requires: libc.so.6(GLIBC_2.15)(64bit) Error: Package: mono-core-3.2.3-0.x86_64 (/mono-core-3.2.3-0.x86_64) Requires: libc.so.6(GLIBC_2.16)(64bit) Error: Package: mono-core-3.2.3-0.x86_64 (/mono-core-3.2.3-0.x86_64) Requires: libc.so.6(GLIBC_2.14)(64bit) Error: Package: mono-core-3.2.3-135.2.x86_64 (Mono_Factory) Requires: libc.so.6(GLIBC_2.16)(64bit) 我在我的操作系统中有glibc 2.12。 但是Mono需要2.16。 如果我尝试更新glibc,我可能会遇到内核问题。 在这种情况下我有什么select? 有什么办法可以解决这个问题吗?

为什么getcontext和setjmp在glibc-x86-64中保存不同的寄存器

这里是他们的源代码: https://sourceware.org/git/ ? p = glibc.git;a = blob_plain;f = sysdeps/unix / sysv/ linux/x86_64 / getcontext.S;hb = HEAD https:// sourceware.org/git/?p=glibc.git;a=blob_plain;f=sysdeps/x86_64/setjmp.S;hb=HEAD 正如你所看到的,getcontext还保存了浮点上下文,并且注册了setjmp所没有的r8和r9。 这是什么原因?

ELF弱导入/回退存根glibcfunction

我试图让我们的程序在一些旧的Linux版本上运行。 防止它的一个常见导入是__longjmp_chk ,在glibc 2.11中添加,但在旧版本中丢失。 一个“解决scheme”是使用-D_FORTIFY_SOURCE=0但这会closures目标libc中存在的其他强化函数( __printf_chk等)。 有没有办法使__longjmp_chk是一个“弱导入”,如果存在,将使用libc.so.6的函数,如果不存在则返回到本地存根?

使用Glibc的散列函数

我一直在试图在Swift中encryptionstring,但是我希望它能在linux下工作。 类似下面的代码(从这些 问题中获得的答案不起作用,因为它们依赖于iOS或OSx库: func sha256(data : Data) -> Data { var hash = [UInt8](repeating: 0, count: Int(CC_SHA256_DIGEST_LENGTH)) data.withUnsafeBytes { _ = CC_SHA256($0, CC_LONG(data.count), &hash) } return Data(bytes: hash) } 在linux下如何使用Glibc来完成?

为什么回溯不包含Objective-C符号而不pipe-rdynamic?

更新:我正在使用Linux上的GNU运行时。 在Apple运行库的MacOS上不会发生此问题。 更新2:我编译了MacOS上的GNU运行时,并用它构build了这个例子。 GNU运行时在MacOS上不会发生该错误。 我会说问题是glibc(因为backtrace和backtrace_symbols是glibc扩展)。 当使用backtrace和backtrace_symbols在GCC编译的Objective-C应用程序中打印backtrace_symbols ,我没有得到任何Objective-C符号。 只有文件名,地址和C符号出现。 我用-g编译,并与-rdynamic 。 我的testing应用程序 void _printTrace() { void *addr[1024]; int aCount = backtrace(addr, 1024); char **frameStrings = backtrace_symbols(addr, aCount); for (int i = 0; i < aCount; i++) { printf("%s\n", frameStrings[i]); } free(frameStrings); } @interface TheObject + (void)_printTrace; + (void)printTrace; @end @implementation TheObject + (void)_printTrace { _printTrace(); } […]

交叉编译glibc for arm

现在我正在使用基于arm-linux的embedded式设备。 我想用glibc为我的目标架构构buildgcc。 海湾合作委员会build立成功,但我有麻烦与glibcbuild设。 我使用最新版本的glibc(ftp.gnu.org/gnu/glibc/glibc-2.12.1.tar.gz)和端口(ftp.gnu.org/gnu/glibc/glibc-ports-2.12.1 .tar.gz)方式 我的configuration线: ../../glibc-2.12.1/configure –host = arm-none-linux-gnueabi –prefix = / home / anatoly / Desktop / ARM / build / glibc-build –enable-add-ons – -with-的binutils = /家庭/阿纳托利/ Desctop / ARM /工具链/ ARM /斌/ configuration脚本工作正常,但我得到一些编译错误: … / home me': /home/anatoly/Desktop/ARM/src/glibc-2.12.1/malloc/lmemusage.c:253: undefined reference to __eabi + read_tp'… 我也尝试使用旧版本(2.11,2.10),但有相同的错误。 有谁知道这个问题的解决scheme?

如何在linux中不使用dlsym挂接

我试图钩一些glibc函数,像fopen,fread等,但在钩函数,我必须使用glibc相同的function。 喜欢这个: // this is my fopen FILE *fopen(…..) { fopen(….);// this is glibc fopen } 我已经find了一种方法来使用dlsym来做到这一点,但是这样我就必须用所有的glibc函数调用与其中使用dlsym调用glibc函数的包装器进行replace。 我很好奇,在没有对包装函数进行编码的情况下,另一种方式可以做同样的工作。 我试过这个: fopen.c ….fopen(..) { myfopen(..); } myfopen.c myfopen(..) { fopen(…);// glibc version } main.c中 int main() { fopen(…); } $ gcc -c *.c $ gcc -shared -o libmyopen.so myopen.o $ gcc -o test main.o fopen.o libmyopen.so 在我的理解中,gcc会按照命令行从左到右的顺序链接,所以main.o会在fopen.o中使用fopen.o,fopen.o将在libmyfopen.so中使用myfopen,libmyfopen.so将在glibc中使用fopen。 […]

LD_PRELOAD和externvariables

说,我想修改mmap 。 所以我为此创build了一个新的共享对象文件,并使用LD_PRELOAD来代替原始的mmap 。 但是,我需要引用一个variables,这是我的程序文件。 我怎样才能做到这一点? 我读了一些关于弱引用的地方。 是这样做的方式。 我不认为你可以使用extern因为你编译的共享库与你的程序分开。 对此有何build议? 其次, LD_PRELOAD只会影响代码中mmap的使用情况,或者也会影响您的代码使用的标准库libc.so中调用的mmap ?

为什么sem_t在64位linux中是32字节?

64位linux中的sem_t是32字节,但是用futex实现,8字节就够了( glibc sem_post ),是真的吗? 如果这是真的,为什么要浪费字节呢? 其实我想使用一个自定义的信号量实现,只使用8个字节,因此使用一个信号量到一个date条目是可能的。 但我不是很确定glibc的实现中的其他字节只是填充。 就我的情况来说,我不打算在工作中使用自定义的信号量。