Титла: Компилиране с 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 директорията, където са инсталирани библиотеките |