单个主机上有多个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) 我想利用C11标准提供的新原子操作.但是,尝试#include使用适当的头文件可以为我提供:
csort-par.c:5:23: fatal error: stdatomic.h: No such file or directory
#include <stdatomic.h>
Run Code Online (Sandbox Code Playgroud)
在文档http://gcc.gnu.org/wiki/C11Status似乎是说,头文件已经提供自GCC 4.7 ...我这么想吗?__STDC_NO_ATOMICS__没有定义.
gcc --version 如下:
gcc (Ubuntu/Linaro 4.8.1-10ubuntu9) 4.8.1
Copyright (C) 2013 Free Software Foundation, Inc.
Run Code Online (Sandbox Code Playgroud)
我确认__STDC_NO_ATOMICS__没有定义如下:
#ifdef __STDC_NO_ATOMICS__
#error yes
#else
#error no
#endif
Run Code Online (Sandbox Code Playgroud)
收益率:
csort-par.c:10:2: error: #error no
#error no
Run Code Online (Sandbox Code Playgroud)
编辑:感谢您的快速回复.
如果有人在谷歌遇到同样的问题而绊倒了这个问题,那么在此期间需要修复,直到他们发布GCC 4.9:
假设我有两个线程A和B都递增一个~global~variable"count".每个线程像这样运行一个for循环:
for(int i=0; i<1000; i++)
count++; //alternatively, count = count + 1;
Run Code Online (Sandbox Code Playgroud)
即每个线程增量计数1000次,并且假设计数从0开始.在这种情况下是否会出现同步问题?或者在执行完成后计数正确等于2000?我想因为语句"count = count + 1"可能会分解成两个汇编指令,所以在这两个指令之间有可能交换另一个线程吗?不确定.你怎么看?