相关疑难解决方法(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万
查看次数

什么是std :: atomic?

我明白这std::atomic<>是一个原子对象.但原子到什么程度?根据我的理解,操作可以是原子的.使对象成为原子意味着什么?例如,如果有两个线程同时执行以下代码:

a = a + 12;
Run Code Online (Sandbox Code Playgroud)

然后是整个操作(比方说add_twelve_to(int))原子?或者是变量原子(so operator=())的变化?

c++ multithreading atomic c++11

129
推荐指数
3
解决办法
9万
查看次数

如何链接到特定的glibc版本?

当我在我的Ubuntu Lucid 10.04 PC上编译某些内容时,它会与glibc链接.Lucid使用了2.11的glibc.当我在另一台带有旧glibc的PC上运行这个二进制文件时,命令失败说没有glibc 2.11 ......

据我所知,glibc使用符号版本控制.我可以强制gcc链接特定的符号版本吗?

在我的具体用法中,我尝试为ARM编译gcc交叉工具链.

linux linker gcc glibc libc

99
推荐指数
7
解决办法
8万
查看次数

"锁定"指令在x86汇编中意味着什么?

我在Qt的源代码中看到了一些x86程序集:

q_atomic_increment:
    movl 4(%esp), %ecx
    lock 
    incl (%ecx)
    mov $0,%eax
    setne %al
    ret

    .align 4,0x90
    .type q_atomic_increment,@function
    .size   q_atomic_increment,.-q_atomic_increment
Run Code Online (Sandbox Code Playgroud)
  1. 从谷歌搜索,我知道lock指令将导致CPU锁定总线,但我不知道CPU何时释放总线?

  2. 关于以上整个代码,我不明白这段代码是如何实现的Add

c++ x86 assembly qt

59
推荐指数
3
解决办法
4万
查看次数

如何"多线程"C代码

我有一个用C编写的数字运算应用程序.它是一种主循环,对于每个值调用,增加"i"的值,执行一些计算的函数.我读到了多线程,我正在考虑在C中学习一点.我想知道像我这样的某些通用代码是否可以自动多线程以及如何.

谢谢

PD为了了解我的代码,让我们说它是这样的:

main(...)
for(i=0;i<=ntimes;i++)get_result(x[i],y[i],result[i]);
Run Code Online (Sandbox Code Playgroud)

...

void get_result(float x,float y,float result){
  result=sqrt(log (x) + log (y) + cos (exp (x + y));
(and some more similar mathematical operations)
}
Run Code Online (Sandbox Code Playgroud)

c multithreading

36
推荐指数
5
解决办法
6万
查看次数

UNIX便携式原子操作

在C中是否有(POSIX-)可移植方式用于原子变量操作,类似于使用pthread的可移植线程?

原子操作是像"递增和获取"这样的操作,它们以原子方式执行,这意味着没有上下文切换可以干扰操作.在Linux内核空间中,我们必须使用atomic_t类型,在Java中我们有java.util.concurrent.atomic包.

在Linux上,atomic.h文件提供原子操作,但include依赖于平台,例如#include <asm-x86_64/atomic.h>,它在Mac OS X上不能以类似的方式提供.

c concurrency posix atomic

30
推荐指数
4
解决办法
3万
查看次数

如何使用自定义版本的glibc和静态链接构建C程序?

我已经构建了glibc 2.14并将其安装在目录中~/GLIBC/glibc_install.现在我想使用这个C库而不是系统的默认C库来构建和运行程序.

  • 为了确保我使用的是自定义glibc,我添加了一个put glibc/stdio-common/printf.c:__printf来打印消息的调用.

  • 然后我重建并重新安装了glibc.

  • 然后我写了一个"Hello,World"程序并尝试编译并链接如下:

    gcc -nodefaultlibs -static -lgcc -L~/GLIBC/glibc_install/lib -o myprog myprog.c
    
    Run Code Online (Sandbox Code Playgroud)

但是我得到以下链接器错误报告:

/usr/lib/gcc/x86_64-linux-gnu/4.4.3/../../../../lib/crt1.o: In function `_start':
(.text+0x19): undefined reference to `__libc_csu_init'
/usr/lib/gcc/x86_64-linux-gnu/4.4.3/../../../../lib/crt1.o: In function `_start':
(.text+0x25): undefined reference to `__libc_start_main'
/tmp/ccACTQEp.o: In function `main':
c1.c:(.text+0xa): undefined reference to `puts'
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

c glibc ld static-linking

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

如何从源代码编译我自己的glibc C标准库并使用它?

我正在尝试编译自己的glibc.我有一个目录glibc,其中包含glibc我从互联网上下载的源代码.从我输入的目录中输入mkdir ../build-glibc.现在从build-glibc我输入的目录../glibc/configure中执行配置.现在我不知道怎么打电话make.我无法从glibc目录中调用它,因为它没有配置集,也不能从中调用它build-glibc,因为makefile不在该目录中.我该如何解决这个问题?

c linux gcc glibc x86-64

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

如何在C中使用原子变量?

我需要在 C 中使用一个原子变量,因为这个变量是跨不同线程访问的。不想要竞争条件。

我的代码在 CentOS 上运行。我有哪些选择?

c linux atomic

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

如何在C中进行原子增量和获取?

我正在寻找一种原子地增加短路的方法,然后返回该值.我需要在内核模式和用户模式下执行此操作,因此它在C语言下,在Linux下,在Intel 32位架构上.不幸的是,由于速度要求,互斥锁不是一个好的选择.

有没有其他方法可以做到这一点?在这一点上,似乎唯一可用的选项是内联一些程序集.如果是这样的话,有人能指出我适当的指示吗?

c linux x86 atomic

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

标签 统计

c ×6

linux ×5

atomic ×4

glibc ×4

gcc ×3

c++ ×2

multithreading ×2

x86 ×2

assembly ×1

c++11 ×1

concurrency ×1

ld ×1

libc ×1

linker ×1

posix ×1

qt ×1

static-linking ×1

x86-64 ×1