单个主机上有多个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) 每个现代操作系统都提供一些原子操作:
Interlocked*API<machine/atomic.h><atomic.h><libkern/OSAtomic.h>对Linux有什么相似之处?
问题:
__sync_*并非所有平台(ARM)都支持GCC原子内置,并且英特尔编译器不支持.<asm/atomic.h>不应该在用户空间中使用,我根本没有成功使用它.此外,我不确定它是否适用于英特尔编译器.有什么建议?
我知道有很多相关的问题,但有些问题指出__sync*哪些对我来说是不可行的(ARM),有些人指出asm/atomic.h.
也许有一个内联汇编库可以为GCC执行此操作(ICC支持gcc汇编)?
编辑:
仅对添加操作有一个非常局部的解决方案(允许实现原子计数器但不能锁定需要CAS的自由结构):
如果您使用libstc++(英特尔编译器使用libstdc++),那么您可以使用或__gnu_cxx::__exchange_and_add中定义的.取决于编译器版本.<ext/atomicity.h><bits/atomicity.h>
但是,我仍然希望看到支持CAS的东西.
我正在寻找一种原子地增加短路的方法,然后返回该值.我需要在内核模式和用户模式下执行此操作,因此它在C语言下,在Linux下,在Intel 32位架构上.不幸的是,由于速度要求,互斥锁不是一个好的选择.
有没有其他方法可以做到这一点?在这一点上,似乎唯一可用的选项是内联一些程序集.如果是这样的话,有人能指出我适当的指示吗?
我正在尝试将我从Mac OS X编写的一些代码移植到Linux上,并且很难找到适合OSX的替代品OSAtomic.h.我找到了gcc __sync*系列,但我不确定它是否与我的旧编译器/内核兼容.我需要在GCC v4.1.2和内核2.6.18上运行代码.
我需要的具体操作是:
有点奇怪的是,locate stdatomic.h在linux机器上运行会找到头文件(在c ++目录中),而在我的OSX机器上运行相同的命令(gcc v4.6.3)则不会返回任何内容.我需要安装什么来获取stdatomic库,它是否适用于gcc v 4.1.2?
作为旁注,我不能使用任何第三方库.
我没有找到太多关于非原子操作的材料。
\n假设我有一个 32 位处理器,并且我想在 64 位变量中保留微秒计数。中断将每微秒更新一次变量。调度程序是非抢占式的。将有一个函数用于清除变量,另一个函数用于读取变量。由于它是 32 位处理器,因此访问将是非原子的。是否有 \xe2\x80\x9cstandard\xe2\x80\x9d 或惯用的处理方法,以便读取器函数不会获得半更新的值?
\n