Re: Generation and usage of shared libs

2001-08-22 Пенетрантность Alexei Khlebnikov
Ingvarr Zhmakin wrote:

 Говорю: make. Ругается:
 ===
 g++ -lstlport_gcc -Lтыры-пыры тыры-мыры.o ... -shared -o
 ~/work/lib/libIBCommon.so -Wl,-soname,~/work/lib/libIBCommon.so
 /usr/bin/ld: cannot open output file ~/work/lib/libIBCommon.so: No such file 
 or directory
 collect2: ld returned 1 exit status
 ===

 А если ту же команду запустить из шелла -- делает, как миленькая.
 Или если, скажем, после -o поставить что-то типа 1.so, работает и
 через make.

/usr/bin/ld: cannot open output file ~/work/lib/libIBCommon.so: No such file 
or directory
- очень информативная строчка. ld не может найти каталога ~/work/lib, поэтому 
не может
создать файл libIBCommon.so и ругается. И у тебя такого каталога нету. Есть, 
вероятно,
каталога типа /home/ingvarr/work/lib. Но чтобы из первого получилось второе, 
символ ~
должен быть развернут в /home/ingvarr. Bash это делает превосходно. Make, 
видимо, не
умеет. g++ и вызванный им ld тем более не умеют. Поэтому ld и написал 
~/work/lib вместо
/home/ingvarr/work/lib. С 1.so, думаю, понятно теперь почему работает.




Re: Generation and usage of shared libs

2001-08-22 Пенетрантность Ingvarr Zhmakin
Доброе утро.

 Но чтобы из первого получилось второе, символ ~
 должен быть развернут в /home/ingvarr. 
Сёмён Сёмёныч
Ах, как всё просто...
Спасибо.

Такой вопрос вдогонку: как дать знать линкеру, что потребные символы
определены в такой-то шарной либе (не в путях /etc/ld.so.conf)?

   Ingvarr.



Re: Generation and usage of shared libs

2001-08-22 Пенетрантность Alexei Khlebnikov
Ingvarr Zhmakin wrote:

 Такой вопрос вдогонку: как дать знать линкеру, что потребные символы
 определены в такой-то шарной либе (не в путях /etc/ld.so.conf)?

Я так понимаю, речь про runtime.

export
LD_LIBRARY_PATH=/usr/local/lib:/home/ingvarr/work/lib:/foo/bar:/whatever;

Кстати, не знаю, может быть ~/work/lib тоже сработает. Попробуй.




Generation and usage of shared libs

2001-08-21 Пенетрантность Ingvarr Zhmakin
Доброе утро.

Это опять я и у меня опять геморрой.

Вот, хочу я сделать шарную либу.

Говорю: make. Ругается:
===
g++ -lstlport_gcc -Lтыры-пыры тыры-мыры.o ... -shared -o
~/work/lib/libIBCommon.so -Wl,-soname,~/work/lib/libIBCommon.so
/usr/bin/ld: cannot open output file ~/work/lib/libIBCommon.so: No such file or 
directory
collect2: ld returned 1 exit status
===

А если ту же команду запустить из шелла -- делает, как миленькая.
Или если, скажем, после -o поставить что-то типа 1.so, работает и
через make.

Где копать?

   Ingvarr.