相关疑难解决方法(0)

单个主机上有多个glibc库

单个主机上有多个glibc库

我的linux(SLES-8)服务器目前有glibc-2.2.5-235,但我有一个程序无法在这个版本上运行,需要glibc-2.3.3.

是否可以在同一主机上安装多个glibc?

这是我在旧glibc上运行程序时遇到的错误:

./myapp: /lib/i686/libc.so.6: version `GLIBC_2.3' not found (required by ./myapp)
./myapp: /lib/i686/libpthread.so.0: version `GLIBC_2.3.2' not found (required by ./myapp)
./myapp: /lib/i686/libc.so.6: version `GLIBC_2.3' not found (required by ./libxerces-c.so.27)
./myapp: /lib/ld-linux.so.2: version `GLIBC_2.3' not found (required by ./libstdc++.so.6)
./myapp: /lib/i686/libc.so.6: version `GLIBC_2.3' not found (required by ./libstdc++.so.6)
Run Code Online (Sandbox Code Playgroud)

所以我创建了一个名为newglibc的新目录,并将以下文件复制到:

libpthread.so.0
libm.so.6
libc.so.6
ld-2.3.3.so
ld-linux.so.2 -> ld-2.3.3.so
Run Code Online (Sandbox Code Playgroud)

export LD_LIBRARY_PATH=newglibc:$LD_LIBRARY_PATH
Run Code Online (Sandbox Code Playgroud)

但是我收到一个错误:

./myapp: /lib/ld-linux.so.2: version `GLIBC_PRIVATE' not found (required by ./newglibc/libpthread.so.0)
./myapp: /lib/ld-linux.so.2: version `GLIBC_2.3' not found (required by libstdc++.so.6)
./myapp: …
Run Code Online (Sandbox Code Playgroud)

linux gcc glibc

155
推荐指数
7
解决办法
15万
查看次数

如何在普通C中启动线程?

我在C中使用了fork()来启动另一个进程.如何开始新线程?

c multithreading

49
推荐指数
5
解决办法
7万
查看次数

-lgcc_s和gcc之间的区别

链接gcc_sgcc通过链接有什么区别LDFLAGS

gcc_s静态库和gcc共享库吗?

因为我正在寻找一个解决方案,其中提到链接反对,gcc而只gcc_s在我的情况下工作.我想知道真正的区别.

<<hidden symbol `__name_here' in /some/library/path.a(_filename.o) is referenced by DSO
Run Code Online (Sandbox Code Playgroud)

在这种情况下,通常通过向gcc -print-libgcc-file-name链接标志(LDFLAGS)添加"-l gcc"或" "来解决问题.但是,与我的其他常规平台(i386,amd64,sparc64)不同,这还不够.经过大量的头脑冲击(公平地说,它也来自音乐)我意识到这个标志在链接libc 最终的可执行文件时都是必要的.链接:http://people.defora.org/~khorben/200903.html

compiler-construction linker gcc loader

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

ARM平台上的SIGABRT信号没有回溯?

我在信号处理程序中使用' backtrce() '和' backtrace_symbols_fd() '函数来生成用于调试的回溯(GDB不可用).

它们在x86桌面(Ubuntu)上工作正常,但在目标设备(基于ARM)上,Abort信号的回溯(由于双重自由错误)仅显示三个帧:信号处理程序和两个来自libc,这是没有用的用于调试我们的代码!在SEGV上回溯(例如使用坏指针)产生良好的回溯.

为什么我不能在ARM上获得有用的ABRT信号回溯?

[为清晰起见编辑了问题]

这是一个简单的测试程序,它演示了这个问题:

#include <execinfo.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

// Signal hangler to catch seg fault:
void handler_segv(int sig) {
    // get void*'s for all entries on the stack
    void *array[10];
    size_t size;
    size = backtrace(array, 10);
    fprintf(stderr, "Error: Signal %d; %d frames found:\n", sig, size);
    // print out all the frames to stderr
    backtrace_symbols_fd(array, size, STDERR_FILENO);
    exit(1);
}


void crashme()
{
  // Deliberate Error: Abort (double free): …
Run Code Online (Sandbox Code Playgroud)

c linux arm signals backtrace

11
推荐指数
2
解决办法
4778
查看次数

如何链接到其他libc文件?

我想提供共享库以及我的程序,而不是由于版本差异而使用目标系统.

ldd 说我的程序使用这些共享库:

linux-gate.so.1 =>  (0xf7ef0000)**(made by kernel)**  
libc.so.6 => /lib32/libc.so.6 (0xf7d88000)**(libc-2.7.so)**  
/lib/ld-linux.so.2 (0xf7ef1000)**(ld-2.7.so)**
Run Code Online (Sandbox Code Playgroud)

我通过编译成功链接了ld-xxx.so:

gcc -std=c99 -D_POSIX_C_SOURCE=200112L -O2 -m32 -s -Wl,-dynamic-linker,ld-2.7.so myprogram.c
Run Code Online (Sandbox Code Playgroud)

但我没有成功的链接libc-xxx.so.我怎样才能做到这一点 ?

c linker gcc libc ld

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

如何编辑和重新构建GCC libstdc ++ C++标准库源代码?

我正在进行一些研究,并希望编辑libstdc ++库中的一些源代码进行实验.具体而言,我对试验并行排序算法感兴趣.有没有一个地方我可以找到文档来轻松编辑和构建源代码?

我试过构建各种版本的libstdc ++库,但没有成功.似乎大多数新版本都需要构建整个gcc包,这是一个更漫长的过程,特别是如果我要编辑和试验libstdc ++中的一些文件.

我也一直无法找到包含并行排序算法的源文件.我似乎只能找到定义函数的头文件,而不是源代码本身.任何建议或文档链接将不胜感激.

c++ parallel-processing gcc stl libstdc++

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