[devel] --as-needed и --gc-section was: Re: [sisyphus] systemd

Alexey Shabalin a.shabalin на gmail.com
Пн Янв 31 18:39:04 UTC 2011


2011/1/29 REAL:
> 29.01.2011 03:58, Ivan A. Melnikov пишет:
>>
>> Похоже на то, что -Wl,--as-needed и -Wl,--gc-sections довольно
>> интересно взаимодействуют. Сначала отрабатывает --as-needed, видит что
>> символы из библиотеки нужны, оставляет её; затем --gc-sections удаляет
>> все секции, которые порождали зависимость. Получаем перелинкованную
>> прогамму.
>>
>> Завтра (теперь уже сегодня) попробую воспроизвести на более простом
>> примере.
>
> У меня есть несколько таких примеров; несмотря на то, что я принудительно
> устанавливаю --as-needed при сборке с openmpi, довольно часто вылазят эти
> самые overlinked. Но судя по обсуждаемому здесь, проблема либо не в openmpi,
> либо НЕ ТОЛЬКО в нём...
>
ibtool: link: x86_64-alt-linux-gcc -std=gnu99 -I/usr/include/dbus-1.0
-I/usr/lib64/dbus-1.0/include -pipe -Wall -O2 -pipe -Wall -W -Wextra
-Wno-inline -Wvla -Wundef -Wformat=2 -Wlogical-op -Wsign-compare
-Wformat-security -Wmissing-include-dirs -Wformat-nonliteral
-Wold-style-definition -Wpointer-arith -Winit-self
-Wdeclaration-after-statement -Wfloat-equal -Wmissing-prototypes
-Wstrict-prototypes -Wredundant-decls -Wmissing-declarations
-Wmissing-noreturn -Wshadow -Wendif-labels -Wcast-align
-Wstrict-aliasing=2 -Wwrite-strings -Wno-long-long
-Wno-overlength-strings -Wno-unused-parameter
-Wno-missing-field-initializers -Wno-unused-result
-Wp,-D_FORTIFY_SOURCE=2 -ffast-math -fno-common
-fdiagnostics-show-option -fno-strict-aliasing -fvisibility=hidden
-ffunction-sections -fdata-sections -Wl,--as-needed -Wl,--gc-sections
-o systemd src/systemd-main.o  ./.libs/libsystemd-core.a -lselinux
-ldbus-1 -lpthread -ludev -lwrap -lpam -lpam_misc -laudit -lcap -ldl
-lrt


Правильно ли я понимаю, что пока не собраны все остальные библиотеки
(libselinux, libdbus, libudev, и остальные ) с параметрами
-ffunction-sections -fdata-sections -Wl,--gc-sections, то собирать
systemd с gc-sections не имеет смысла?
Стоит ли к нашему gcc по умолчанию добавлять эти опции, как сделано
для --as-needed?
Правильно ли сейчас ругается
lib.req: WARNING: /home/alex/tmp/systemd-buildroot/bin/systemd:
overlinked libraries: /lib64/ld-linux-x86-64.so.2
или lib.req ведёт себя не верно в этом случае. И если верно, может
просто убрать gc-sections из параметров линковки?


-- 
Alexey Shabalin


Подробная информация о списке рассылки Devel