如何处理重复的.so文件?

时间:2019-05-30 15:58:35

标签: linux gcc shared-libraries

即使在编译时指定了正确的代码,我在运行时也会得到错误的消息。

samiam@samiam-linux-pc:~/projects/petit_ami$ make event
gcc -g3 -o event xterm.c event.c libc.so -lm 
samiam@samiam-linux-pc:~/projects/petit_ami$ ./event
./event: relocation error: ./event: symbol ovr_write version 
GLIBC_2.2.5 not defined in file libc.so.6 with link time reference
samiam@samiam-linux-pc:~/projects/petit_ami$ ldd event
    linux-vdso.so.1 (0x00007ffda5ffa000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fe641048000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fe641642000)
samiam@samiam-linux-pc:~/projects/petit_ami$

我正在使用备用glibc .so,位于当前目录中。我能够证明gcc链接到正确的库,因为如果删除libc.so文件,它将抱怨缺少文件。另外,如果我从gcc命令行中删除libc.so文件,则会在运行时得到丢失的引用。

因此,gcc在编译时针对我的libc.so起作用,但是在运行时它将转到libc.so的标准位置,而不是本地文件。 LD_DEBUG也显示此行为。我也试过把“。”在LIBRARY_PATH的第一个位置上,它无效。

理想的答案是按照搜索顺序将目录放置在其他目录之前(就像我尝试使用LIBRARY_PATH一样),因为我定义了多个本地库,但并非全部都具有相同的名称。

0 个答案:

没有答案