Автор Тема: Компилиране с shared библиотеки  (Прочетена 4606 пъти)

mikgigs

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

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

ray

  • Напреднали
  • *****
  • Публикации: 1464
    • Профил
Компилиране с shared библиотеки
« Отговор #1 -: Nov 15, 2005, 20:14 »
Здравей,
Един малко груб начин но трябва да сработи, задай --static и с цената на по-голяма (по обем) програма би трябвало да работи.
Успех.Румен
Активен

PhobosK

  • Напреднали
  • *****
  • Публикации: 282
  • Distribution: Ubuntu, Mandriva, Gentoo, Slackware, Fedora, SuSe
  • Window Manager: KDE, GNOME
    • Профил
    • WWW
Компилиране с shared библиотеки
« Отговор #2 -: 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 наистина.
Активен

...I could drown in your eyes,
 Die in your arms,
 Live for these moments,
 Here in the dark
 I don't know where I end,
 Not sure where you start,
 When we're body to body...

mikgigs

  • Участници
  • ***
  • Публикации: 8
    • Профил
Компилиране с shared библиотеки
« Отговор #3 -: Nov 15, 2005, 22:07 »
Благодаря ви много..
Май вече имам избор на действие..
Поздрави за всички линукс потребители...
Активен

SASq

  • Новаци
  • *
  • Публикации: 1
    • Профил
    • WWW
Компилиране с shared библиотеки
« Отговор #4 -: Nov 15, 2005, 22:27 »
Аз лично предпочитам -static ,
защото е по-сигурен по отношение на съвместността.

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

Бъди Свободен - Създаден за да улесни всички потребители на безплатни програми.

SASq

  • Гост
Компилиране с shared библиотеки
« Отговор #5 -: Nov 16, 2005, 08:37 »
Сега пробвам със --static, че по-лесно..
Обаче най-вероятно ще трябва да го направя по втория начин, както го е дал ФобосК.
Активен

  • Гост
Компилиране с shared библиотеки
« Отговор #6 -: Nov 16, 2005, 08:52 »
Да резултатите дойдоха... - използвайки пътя, работите тръгват...и успях да подкарам кода...

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

Hapkoc

  • Напреднали
  • *****
  • Публикации: 2117
    • Профил
Компилиране с shared библиотеки
« Отговор #7 -: 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 директорията, където са инсталирани библиотеките
Активен

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
Windows shared file
Настройки на софтуер
arch 5 4662 Последна публикация May 15, 2006, 20:20
от
Posix shared memory
Настройка на хардуер
igt 1 3225 Последна публикация Sep 03, 2006, 16:33
от
Shared resource scanner
Настройка на програми
Maggot 2 3602 Последна публикация Feb 12, 2007, 17:14
от dedmin
Достъпен VPS,Dedicate, shared hosting
Кошче
tmacbg 0 3139 Последна публикация Aug 14, 2012, 09:09
от tmacbg
VirtualBox shared clipboard-копиране на текст през кипборда м/у виртуалката и К.
Хардуерни и софтуерни проблеми
Naka 11 10971 Последна публикация Nov 20, 2021, 09:01
от Naka