* Re: [devel] xplc-0.3.12-alt1.1: rebuild failed [6] @ 2006-04-16 21:45 ` Alexey Tourbin 2006-04-16 21:50 ` Dmitry V. Levin 0 siblings, 1 reply; 6+ messages in thread From: Alexey Tourbin @ 2006-04-16 21:45 UTC (permalink / raw) To: devel [-- Attachment #1: Type: text/plain, Size: 2736 bytes --] On Mon, Apr 17, 2006 at 12:24:57AM +0400, QA Team Robot wrote: > i586-alt-linux-g++ -pipe -Wall -O2 -march=i586 -mtune=pentium4 -pipe -Wall -O2 -march=i586 -mtune=pentium4 -O2 -DNDEBUG -Wall -Woverloaded-virtual -fno-rtti -fno-exceptions -fpic -DUNSTABLE -pipe -Iinclude -ldl -shared -Wl,-hlibxplc-0.3.so -Wl,-z,defs,--version-script=config/exports.map xplc/category.o xplc/catiter.o xplc/catmgr.o xplc/loader.o xplc/moduleloader.o xplc/modulemgr.o xplc/monikers.o xplc/new.o xplc/servmgr.o xplc/statichandler.o libxplc-cxx.so -o libxplc.so > xplc/loader.o: In function `loaderOpen(char const*, void**)':loader.cpp:(.text+0x16): undefined reference to `dlerror' > :loader.cpp:(.text+0x29): undefined reference to `dlopen' > :loader.cpp:(.text+0x40): undefined reference to `dlerror' > xplc/loader.o: In function `loaderSymbol(void*, char const*, void**)':loader.cpp:(.text+0x63): undefined reference to `dlerror' > :loader.cpp:(.text+0x75): undefined reference to `dlsym' > :loader.cpp:(.text+0x7f): undefined reference to `dlerror' > xplc/loader.o: In function `loaderClose(void*&)':loader.cpp:(.text+0xa6): undefined reference to `dlclose' > collect2: ld returned 1 exit status > make: *** [libxplc.so] Error 1 > make: Leaving directory `/usr/src/RPM/BUILD/xplc-0.3.12' Глюк компилятора. Происходит примерно вот что (в упрощенном виде). $ g++ -ldl -shared -Wl,-hlibxplc-0.3.so -Wl,--version-script=config/exports.map xplc/category.o xplc/catiter.o xplc/catmgr.o xplc/loader.o xplc/moduleloader.o xplc/modulemgr.o xplc/monikers.o xplc/new.o xplc/servmgr.o xplc/statichandler.o libxplc-cxx.so -o libxplc.so -Wl,-z,defs xplc/loader.o: In function `loaderOpen(char const*, void**)':loader.cpp:(.text+0x1a): undefined reference to `dlerror' :loader.cpp:(.text+0x2d): undefined reference to `dlopen' :loader.cpp:(.text+0x45): undefined reference to `dlerror' xplc/loader.o: In function `loaderSymbol(void*, char const*, void**)':loader.cpp:(.text+0x73): undefined reference to `dlerror' :loader.cpp:(.text+0x85): undefined reference to `dlsym' :loader.cpp:(.text+0x8f): undefined reference to `dlerror' xplc/loader.o: In function `loaderClose(void*&)':loader.cpp:(.text+0xc0): undefined reference to `dlclose' collect2: ld returned 1 exit status $ То есть я даю ему -ldl, но он в упор не видит dlopen. Теперь я переставляю -ldl с первого места на последнее: $ g++ -shared -Wl,-hlibxplc-0.3.so -Wl,--version-script=config/exports.map xplc/category.o xplc/catiter.o xplc/catmgr.o xplc/loader.o xplc/moduleloader.o xplc/modulemgr.o xplc/monikers.o xplc/new.o xplc/servmgr.o xplc/statichandler.o libxplc-cxx.so -o libxplc.so -Wl,-z,defs -ldl $ Получилось! Документирован ли порядок аргументов у gcc? [-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --] ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [devel] xplc-0.3.12-alt1.1: rebuild failed [6] 2006-04-16 21:45 ` [devel] xplc-0.3.12-alt1.1: rebuild failed [6] Alexey Tourbin @ 2006-04-16 21:50 ` Dmitry V. Levin 2006-04-16 22:37 ` Alexey Tourbin 0 siblings, 1 reply; 6+ messages in thread From: Dmitry V. Levin @ 2006-04-16 21:50 UTC (permalink / raw) To: ALT Devel discussion list [-- Attachment #1: Type: text/plain, Size: 1655 bytes --] On Mon, Apr 17, 2006 at 01:45:32AM +0400, Alexey Tourbin wrote: > Глюк компилятора. Происходит примерно вот что (в упрощенном виде). > > $ g++ -ldl -shared -Wl,-hlibxplc-0.3.so -Wl,--version-script=config/exports.map xplc/category.o xplc/catiter.o xplc/catmgr.o xplc/loader.o xplc/moduleloader.o xplc/modulemgr.o xplc/monikers.o xplc/new.o xplc/servmgr.o xplc/statichandler.o libxplc-cxx.so -o libxplc.so -Wl,-z,defs > xplc/loader.o: In function `loaderOpen(char const*, void**)':loader.cpp:(.text+0x1a): undefined reference to `dlerror' > :loader.cpp:(.text+0x2d): undefined reference to `dlopen' > :loader.cpp:(.text+0x45): undefined reference to `dlerror' > xplc/loader.o: In function `loaderSymbol(void*, char const*, void**)':loader.cpp:(.text+0x73): undefined reference to `dlerror' > :loader.cpp:(.text+0x85): undefined reference to `dlsym' > :loader.cpp:(.text+0x8f): undefined reference to `dlerror' > xplc/loader.o: In function `loaderClose(void*&)':loader.cpp:(.text+0xc0): undefined reference to `dlclose' > collect2: ld returned 1 exit status > $ > > То есть я даю ему -ldl, но он в упор не видит dlopen. > > Теперь я переставляю -ldl с первого места на последнее: > > $ g++ -shared -Wl,-hlibxplc-0.3.so -Wl,--version-script=config/exports.map xplc/category.o xplc/catiter.o xplc/catmgr.o xplc/loader.o xplc/moduleloader.o xplc/modulemgr.o xplc/monikers.o xplc/new.o xplc/servmgr.o xplc/statichandler.o libxplc-cxx.so -o libxplc.so -Wl,-z,defs -ldl > $ > > Получилось! Лёш, это не глюк, это --as-needed, видимо, ты пропустил эту историю, см. напр. http://wiki.sisyphus.ru/devel/UpStream/AsNeeded -- ldv [-- Attachment #2: Type: application/pgp-signature, Size: 191 bytes --] ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [devel] xplc-0.3.12-alt1.1: rebuild failed [6] 2006-04-16 21:50 ` Dmitry V. Levin @ 2006-04-16 22:37 ` Alexey Tourbin 2006-04-16 22:47 ` Dmitry V. Levin 0 siblings, 1 reply; 6+ messages in thread From: Alexey Tourbin @ 2006-04-16 22:37 UTC (permalink / raw) To: ALT Devel discussion list [-- Attachment #1: Type: text/plain, Size: 1279 bytes --] On Mon, Apr 17, 2006 at 01:50:27AM +0400, Dmitry V. Levin wrote: > > Теперь я переставляю -ldl с первого места на последнее: > > > > $ g++ -shared -Wl,-hlibxplc-0.3.so -Wl,--version-script=config/exports.map xplc/category.o xplc/catiter.o xplc/catmgr.o xplc/loader.o xplc/moduleloader.o xplc/modulemgr.o xplc/monikers.o xplc/new.o xplc/servmgr.o xplc/statichandler.o libxplc-cxx.so -o libxplc.so -Wl,-z,defs -ldl > > $ > > > > Получилось! > > Лёш, это не глюк, это --as-needed, видимо, ты пропустил эту историю, см. > напр. http://wiki.sisyphus.ru/devel/UpStream/AsNeeded Кажется я догадываюсь, как это реализовано: компилятор (линкер в данном случае) сканирует аргументы командной строки слева направо. Он видит -ldl и проверяет, использует ли создаваемый ELF shared object какие-либо символы из -ldl. Поскольку создаваемый ELF в данном случае вообще пустой, компилятор выбрасывает -ldl и идёт дальше. Потом ему попадаются объектные файлы с dlopen(), но -ldl уже проехали. В конце активизируется -Wl,-z,defs и отваливает. Если считать это такое поведение компилятора консистентным (особенно с точки зрения "Rule of Least Surprise"), тогда я наверное великий Корнхолио. Поэтому я и спрашиваю: документирован порядок обработки аргументов или нет. [-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --] ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [devel] xplc-0.3.12-alt1.1: rebuild failed [6] 2006-04-16 22:37 ` Alexey Tourbin @ 2006-04-16 22:47 ` Dmitry V. Levin 2006-04-17 1:00 ` Alexey Tourbin 0 siblings, 1 reply; 6+ messages in thread From: Dmitry V. Levin @ 2006-04-16 22:47 UTC (permalink / raw) To: ALT Devel discussion list [-- Attachment #1: Type: text/plain, Size: 1628 bytes --] On Mon, Apr 17, 2006 at 02:37:50AM +0400, Alexey Tourbin wrote: > On Mon, Apr 17, 2006 at 01:50:27AM +0400, Dmitry V. Levin wrote: > > > Теперь я переставляю -ldl с первого места на последнее: > > > > > > $ g++ -shared -Wl,-hlibxplc-0.3.so -Wl,--version-script=config/exports.map xplc/category.o xplc/catiter.o xplc/catmgr.o xplc/loader.o xplc/moduleloader.o xplc/modulemgr.o xplc/monikers.o xplc/new.o xplc/servmgr.o xplc/statichandler.o libxplc-cxx.so -o libxplc.so -Wl,-z,defs -ldl > > > $ > > > > > > Получилось! > > > > Лёш, это не глюк, это --as-needed, видимо, ты пропустил эту историю, см. > > напр. http://wiki.sisyphus.ru/devel/UpStream/AsNeeded > > Кажется я догадываюсь, как это реализовано: компилятор (линкер в данном > случае) сканирует аргументы командной строки слева направо. Он видит > -ldl и проверяет, использует ли создаваемый ELF shared object какие-либо > символы из -ldl. Поскольку создаваемый ELF в данном случае вообще > пустой, компилятор выбрасывает -ldl и идёт дальше. Потом ему попадаются > объектные файлы с dlopen(), но -ldl уже проехали. В конце > активизируется -Wl,-z,defs и отваливает. Именно так оно и происходит, это уже здесь обсуждалось, см. http://lists.altlinux.org/pipermail/devel/2006-March/029704.html и в целом архив этого списка за прошлый месяц с темой --as-needed. > Если считать это такое поведение компилятора консистентным (особенно с > точки зрения "Rule of Least Surprise"), тогда я наверное великий > Корнхолио. Поэтому я и спрашиваю: документирован порядок обработки > аргументов или нет. Наверняка документирован. -- ldv [-- Attachment #2: Type: application/pgp-signature, Size: 191 bytes --] ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [devel] xplc-0.3.12-alt1.1: rebuild failed [6] 2006-04-16 22:47 ` Dmitry V. Levin @ 2006-04-17 1:00 ` Alexey Tourbin 2006-04-17 11:27 ` [devel] gcc, порядок аргументов и --as-needed (was: xplc-0.3.12-alt1.1: rebuild failed [6]) Michael Shigorin 0 siblings, 1 reply; 6+ messages in thread From: Alexey Tourbin @ 2006-04-17 1:00 UTC (permalink / raw) To: ALT Devel discussion list [-- Attachment #1: Type: text/plain, Size: 1309 bytes --] On Mon, Apr 17, 2006 at 02:47:27AM +0400, Dmitry V. Levin wrote: > > Кажется я догадываюсь, как это реализовано: компилятор (линкер в данном > > случае) сканирует аргументы командной строки слева направо. Он видит > > -ldl и проверяет, использует ли создаваемый ELF shared object какие-либо > > символы из -ldl. Поскольку создаваемый ELF в данном случае вообще > > пустой, компилятор выбрасывает -ldl и идёт дальше. Потом ему попадаются > > объектные файлы с dlopen(), но -ldl уже проехали. В конце > > активизируется -Wl,-z,defs и отваливает. > > Именно так оно и происходит, это уже здесь обсуждалось, см. > http://lists.altlinux.org/pipermail/devel/2006-March/029704.html > и в целом архив этого списка за прошлый месяц с темой --as-needed. В два прохода надо делать: сначала *.o, потом *.so, и потом только решать, какие из *.so оставлять. Но есть ещё *.a. Не понятно тогда, вклинивать ли *.a перед *.so или после *.so. На это ещё -static может влиять. Короче точную формулировку в соответствии c "Rule of Least Surprise" с ходу дать затруднительно. Лучше бы порядок аргументов и соответствующая семантика были исчерпывающим образом документированы. А то получается кур смешить: --as-needed должен отсекать только ненужные библиотеки, а на деле может отсекать и нужные. [-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --] ^ permalink raw reply [flat|nested] 6+ messages in thread
* [devel] gcc, порядок аргументов и --as-needed (was: xplc-0.3.12-alt1.1: rebuild failed [6]) 2006-04-17 1:00 ` Alexey Tourbin @ 2006-04-17 11:27 ` Michael Shigorin 0 siblings, 0 replies; 6+ messages in thread From: Michael Shigorin @ 2006-04-17 11:27 UTC (permalink / raw) To: ALT Devel discussion list On Mon, Apr 17, 2006 at 05:00:02AM +0400, Alexey Tourbin wrote: > Короче точную формулировку в соответствии c "Rule of Least > Surprise" с ходу дать затруднительно. Но ощущение нарушения принципа IBM витает в воздухе... Как думаешь -- это исправимо вообще? -- ---- WBR, Michael Shigorin <mike@altlinux.ru> ------ Linux.Kiev http://www.linux.kiev.ua/ ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2006-04-17 11:27 UTC | newest] Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2006-04-16 21:45 ` [devel] xplc-0.3.12-alt1.1: rebuild failed [6] Alexey Tourbin 2006-04-16 21:50 ` Dmitry V. Levin 2006-04-16 22:37 ` Alexey Tourbin 2006-04-16 22:47 ` Dmitry V. Levin 2006-04-17 1:00 ` Alexey Tourbin 2006-04-17 11:27 ` [devel] gcc, порядок аргументов и --as-needed (was: xplc-0.3.12-alt1.1: rebuild failed [6]) Michael Shigorin
ALT Linux Team development discussions This inbox may be cloned and mirrored by anyone: git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \ devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru public-inbox-index devel Example config snippet for mirrors. Newsgroup available over NNTP: nntp://lore.altlinux.org/org.altlinux.lists.devel AGPL code for this site: git clone https://public-inbox.org/public-inbox.git