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