Linux за българи: Форуми

Linux секция за напреднали => Хардуерни и софтуерни проблеми => Темата е започната от: mikgigs в Nov 15, 2005, 19:36



Титла: Компилиране с shared библиотеки
Публикувано от: mikgigs в Nov 15, 2005, 19:36
Здравейте!
Моля за Вашата помощ по проблема, с който се сблъсках..
В момента портирам код написан на Windows за специализирана система с Линукс i ARM процесор (на която нямам възможност да компилирам и дебъгвам)..
За целта използвам Линукс дистрибуция, на който имам нужните видове компилатори и т.н. Тъй като цялата история с g++, make-файлове, скриптове ми е абсолютно мътна.....
Моля да ми помогнете с разбиране :)))
Проблема е следният -  на линукса нямам права върху системните папки(компютъра е в студентска мрежа)..За нуждите на моя проект използвам библиотека, която инсталирам по всички правила указвайки на ./configure --prefix - папка в моето работно пространство..make...make install.... Всичко до тук е добре..Създават се .so файлове, имам и пакетен файл .pc...
Когато компилирам мой проект който използва тези библиотеки също всичко се получава добре използвам за компилация следното :
g++ `pkg-config --cflags пакет.pc` -o мояфайл мояфайл.c 'pkg-config --libs пакет.pc'
Компилацията минава...но след пускане на програмата
ми излиза съобщение че програмата не може да намери еди си кои .so файлове...
Въпроса ми е следният:
Как мога да компилирам програма и да укажа пътя на файловете на библиотеката(които ще се намират в текущата папка) без да конфигурирам системно /etc/ld.so.conf...., за да може да работи безпроблемно....

Мога ли да компилирам програмата си така, че да бъде използвана друг компютър(естествено като се пренесат всички нужни файлове)...


Титла: Компилиране с shared библиотеки
Публикувано от: ray в Nov 15, 2005, 20:14
Здравей,
Един малко груб начин но трябва да сработи, задай --static и с цената на по-голяма (по обем) програма би трябвало да работи.
Успех.Румен


Титла: Компилиране с shared библиотеки
Публикувано от: PhobosK в Nov 15, 2005, 20:15
export LD_LIBRARY_PATH=път_до_библиотеките_в_твоето_работно_пространство:/usr/lib:/usr/local/lib:и_т.н.

Например (предполагайки, че компилираш и инсталираш в ~/usr):
LD_LIBRARY_PATH="/home/user_dir/usr/lib:/usr/lib:/usr/local/lib"

Освен това за да нямаш проблеми е добре към env. variables да прибавиш (примерно) и :
export CPPFLAGS="-I/home/user_dir/usr/include -I/usr/local/include -I/usr/include -I/usr/X11R6/include -I/usr/lib/qt3/include"
export LDFLAGS="-L/home/user_dir/usr/lib -L/usr/local/lib -L/usr/lib -L/usr/X11R6/lib -L/usr/lib/qt3/lib"
export ACLOCAL_FLAGS="-I /home/user_dir/usr/share/aclocal -I /usr/share/aclocal -I /usr/local/share/aclocal"
export PKG_CONFIG_PATH="/home/user_dir/usr/lib/pkgconfig:/usr/local/lib/pkgconfig:/usr/lib/pkgconfig"

Същото е добре да направиш и за: PYTHONPATH, GTK_PATH, PERL5LIB, MONO_GAC_PREFIX, GCONF_CONFIG_SOURCE и т.н. в зависимост от това какво точно компилираш.

EDIT: Иначе най-сигурно, че нещата ще работят без проблем и на друг компютър е да компилираш със -static наистина.


Титла: Компилиране с shared библиотеки
Публикувано от: mikgigs в Nov 15, 2005, 22:07
Благодаря ви много..
Май вече имам избор на действие..
Поздрави за всички линукс потребители...


Титла: Компилиране с shared библиотеки
Публикувано от: SASq в Nov 15, 2005, 22:27
Аз лично предпочитам -static ,
защото е по-сигурен по отношение на съвместността.

П.П Интересно ми е ти на кой си се спрял.


Титла: Компилиране с shared библиотеки
Публикувано от: в Nov 16, 2005, 08:37
Сега пробвам със --static, че по-лесно..
Обаче най-вероятно ще трябва да го направя по втория начин, както го е дал ФобосК.


Титла: Компилиране с shared библиотеки
Публикувано от: в Nov 16, 2005, 08:52
Да резултатите дойдоха... - използвайки пътя, работите тръгват...и успях да подкарам кода...

Вероятно на моята системка ще направя някакъв команден скрипт, който да слага пътя в системните променливи, както ФОбос  и програмката да тръгва..


Титла: Компилиране с shared библиотеки
Публикувано от: Hapkoc в Nov 16, 2005, 13:52
Принципно най-чистия вариант за LD_LIBRARY_PATH ми се струва, че е да сложиш в login скриптовете да се експортва променливата.

Да кажем ако си с bash шел  - добвавяш в /home/$USER/.bashrc следното:
export LD_LIBRARY_PATH="/home/$USER/blabla"

По този начин ще имаш дефинирана променливата LD_LIBRARY_PATH във всяка инстанция на шела.

Поздрави

p.s.: за csh би трябвало файла да е .cshrc, а командата setenv LD_LIBRARY_PATH "/home/$USER/blabla"

p.p.s.: $USER е потребителското ти име, blabla e директорията, където са инсталирани библиотеките