связывание с "локальной" версией библиотеки - PullRequest
2 голосов
/ 27 августа 2011

Здравствуйте, я пытаюсь установить новую версию zlib, и у меня нет прав root, поэтому я просто установлю ее локально.Установка системы 1.2.3, и я пытаюсь использовать 1.2.5

Я компилирую как

g++ -g myProg.cpp myOs.o -lpthread -IzlibInc/  -LzlibLib/ -lz  -o myProg

, используя ldd, он говорит:

    ldd myProg
libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003c15800000)
libz.so.1 => /usr/lib64/libz.so.1 (0x0000003c15c00000)
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x0000003c17400000)
libm.so.6 => /lib64/libm.so.6 (0x0000003c15400000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x0000003c17000000)
libc.so.6 => /lib64/libc.so.6 (0x0000003c14c00000)
/lib64/ld-linux-x86-64.so.2 (0x0000003c14800000)

Так чтонеправильно связывается.

Спасибо

/////////////////////////////////////////////

update

У меня есть 2 папки с именами zlibInc и zlibLib, которые содержат заголовки и общие объектные файлы.

ls zlibLib/
libz.a  libz.so  libz.so.1  libz.so.1.2.5  pkgconfig
ls zlibInc/
zconf.h  zlib.h

мой исходный код

cat zlibTest.cpp
#include <cstdio>
#include <zlib.h>

int main(){
  fprintf(stderr,"%s\n",ZLIB_VERSION);
  int *a=new int[10];

  gzread(stdin,a,5);
  return 0;
}

И моя командная строка для компиляции

g++ zlibTest.cpp   -I zlibInc/ -L zlibLib/ -L . -I . -lz;ldd a.out
libz.so.1 => /usr/lib64/libz.so.1 (0x0000003c15c00000)
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x0000003c17400000)
libm.so.6 => /lib64/libm.so.6 (0x0000003c15400000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x0000003c17000000)
libc.so.6 => /lib64/libc.so.6 (0x0000003c14c00000)
/lib64/ld-linux-x86-64.so.2 (0x0000003c14800000)

1 Ответ

5 голосов
/ 27 августа 2011

Это ссылка правильно.Локальный zlib и общесистемный zlib имеют одно и то же SONAME, а компоновщик времени выполнения ничего не знает о вашей локальной версии.Вы можете предоставить компоновщику опцию -rpath (-Wl,-rpath=./zlibLib) или установить переменную окружения LD_LIBRARY_PATH во время выполнения (LD_LIBRARY_PATH=./zlibLib:$LD_LIBRARY_PATH ./myProg).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...