2010-08-26 5 views
1

GCC 4.4.3 c89 линукскопирование приложения на другую машину, не может найти разделяемые библиотеки

Я использую log4c и поместили ИНК и Лив в следующих каталогах

/home/jeff/projects/gateway/tools/log4c/inc 
/home/jeff/projects/gateway/tools/log4c/lib 

В моем Makefile У меня есть указанный ИНК и LIB путь:

INC_PATH = -I tools/log4c/inc 
LIB_PATH = -L tools/log4c/lib 
LIBS = -llog4c 

В моем Lib каталога у меня есть следующие общие библиотеки:

lrwxrwxrwx 1 root root  17 2010-08-26 15:57liblog4c.so -> liblog4c.so.3.1.0 
lrwxrwxrwx 1 root root  17 2010-08-26 15:57 liblog4c.so.3 -> liblog4c.so.3.1.0 
-rw-r--r-- 1 root root 100180 2010-08-26 15:55 liblog4c.so.3.1.0 

Я компилирую мое приложение на моем компьютере для разработки, а затем скопировать двоичный и инструменты каталог на тестовой машине

Так что, когда я выполнить бинарный на тестовой машине я получаю следующее сообщение об ошибке:

./app: error while loading shared libraries: liblog4c.so.3: cannot open shared object file: No such file or directory 

Однако, все прекрасно работает на моей машине развития, которая имеет ту же структуру каталогов, т.е.

Dev машины:

/projects/gateway/app 
/projects/gateway/tools/log4c/inc 
/projects/gateway/tools/log4c/lib 

машина испытания:

/projects/gateway/app 
/projects/gateway/tools/log4c/inc 
/projects/gateway/tools/log4c/lib 

Так мне интересно, почему он не может найти его общую библиотеку.

Большого спасибо за любые предложения,

ответ

2

/projects/gateway/tools/log4c/lib следует либо поставить на /etc/ld.so.conf (назовут/SBIN/LDCONFIG после) или к LD_LIBRARY_PATH переменной оболочки так, динамический компоновщик будет знать, где искать требуемую общую библиотеку.

См Program Library HOWTO (3.5. Установка и использование разделяемых библиотек) для получения дополнительной информации

+0

Как об использовании RPATH. Причина, по которой я спросил, заключается в том, что пользователь не знает, как настроить систему. Я просто дам им двоичные файлы, и клиент просто хочет запустить приложение. Благодарю. – ant2009

+1

Да, использование 'rpath' также является опцией, вам просто нужно поставить допустимый (для dev, test и production) путь библиотеки. Если это относительно, вам нужно будет запустить программу из указанного каталога, где путь будет действительным. –

Смежные вопросы