On Fri, Jun 02, 2006 at 05:17:57PM +0400, Dmitry V. Levin wrote: > On Fri, Jun 02, 2006 at 03:00:32PM +0400, Alexey Tourbin wrote: > > On Fri, Jun 02, 2006 at 11:47:11AM +0400, Damir Shayhutdinov wrote: > > > 01.06.06, Alexey Tourbin написал(а): > > > > > Убрать -Wl,-z,defs - в этом всё равно нет смысла при линковке -shared. > > > > > > > > Почему не имеет смысла?> > > > ld(1) > > > ---- > > > -z > > > defs > > > Disallows undefined symbols in object files. Undefined symbols > > > in shared libraries are still allowed. > > > > Автор мана имел в виду другое. > Что именно? Я догадываюсь, что имел в виду автор мана, но лучше у него самого спросить. Смыл наверное в том, что -z,defs проверяет разрешимость символов только у создаваемого бинаря, но не рекурсивно. > > $ cat test.c > > test() > > { > > no_such_function(); > > } > > $ gcc -shared -fPIC -o libtest.so test.c > > $ ls -l libtest.so > > -rwxr-xr-x 1 at at 5591 Jun 2 14:54 libtest.so > > $ gcc -shared -fPIC -o libtest.so test.c -Wl,-z,defs > > /tmp/.private/at/ccCRSta9.o: In function `test': > > test.c:(.text+0x14): undefined reference to `no_such_function' > > collect2: ld returned 1 exit status > > $ > > Ну и что? Часть символов живёт в ld.so и тем самым делает -Wl,-z,defs > малопригодным на практике. Нет. Рядовой библиотеке от ld.so ничего не надо. -z,defs таким образом -- чрезвычайное полезное изобретение, оно *гарантирует* на стадии сборки, что все символы библиотеки разрешаются. С ходу помню, что использовал -z,defs в пакетах liblapack и liblua5.1.