LINUX.ORG.RU

Полустатическая сборка программ


0

0

Всем привет!

Я собрал программу, сделал ldd my_prog и заметил, что программа
зависит от большого числа динамических библиотек.

Затем я указал g++ опцию -static и получил статический бинарник,
который ни от чего не зависит.

Возник вопрос, а можно ли сделать бинарник статическим, но при
этом чтобы от одной либы он всё же зависил динамически (не хочется 
её вкомпиливать)?

Re: Полустатическая сборка программ

Можно, но не просто: от версии к версии gcc и libc все меняется.

Простейший способ, скажем, воткнуть статически библиотеку "qwerty": g++ -Xlinker -Bstatic -lqwerty -Xlinker -Bdynamic -lпрочиелибы...

(вместо -Xlinker option можно короче, -Wl,option )

Die-Hard ★★★★★ ()

Re: Полустатическая сборка программ

Вдогонку:

g++ -- вещь в себе. Если нужен полный контроль над линковкой, то надо в качестве фронтенда пользовать gcc и указывать stdc++ (а, может, и не только stdc++) явно. И все это будет зависеть от версии.

Die-Hard ★★★★★ ()
Ответ на: Re: Полустатическая сборка программ от Die-Hard

Re: Полустатическая сборка программ

> Если нужен полный контроль над линковкой, то надо в качестве фронтенда пользовать gcc и указывать stdc++ (а, может, и не только stdc++) явно

это как? вы имели в виду gcc -x c++ ... или что-то иное?

ananas ★★★★★ ()
Ответ на: Re: Полустатическая сборка программ от ananas

Re: Полустатическая сборка программ

ananas:

> вы имели в виду gcc -x c++ ... или что-то иное?

Иное.

Компиляция, ессно, g++. А линковка gcc с -lstdc++

Подробнее было тут:

http://www.linux.org.ru/view-message.jsp?msgid=751967

( Die-Hard (03.01.2005 14:55:22) )

Die-Hard ★★★★★ ()
Ответ на: Re: Полустатическая сборка программ от h8

Re: Полустатическая сборка программ

h8:

> а что, нельзя требуемую библиотеку подключать динамически?

Можно!

Только надо знать, какие библиотеки и в какой последовательности подсовывать линкеру. А это будет отличаться от версии к версии.

Die-Hard ★★★★★ ()
Ответ на: Re: Полустатическая сборка программ от h8

Re: Полустатическая сборка программ

h8 (21.09.2005 0:42:47):

> при динамическом подключении линковщик вообще ничего не знает о библиотеке. Поэтому и зменения от версии к версии никак не влияют

Ну, во-первых, влияют, особенно при RTLD_NOW.

Во-вторых, ldopen() ни разу не POSIX и вообще с соляриса пришел.

Но главное, речь-то о совершенно другом шла. Грузить библиотеки "вручную", естественно, никто не запрещает, но это уже совершенно другая история.

Die-Hard ★★★★★ ()
Ответ на: Re: Полустатическая сборка программ от h8

Re: Полустатическая сборка программ

> Не понял. Причем тут это? Я говорил про void* handle = dlopen("./libfoo.so", RTLD_LAZY);

Ничего подобного, говорил ты совсем о другом ;-)

anonymous ()
Ответ на: Re: Полустатическая сборка программ от Die-Hard

Re: Полустатическая сборка программ

> Во-вторых, ldopen() ни разу не POSIX и вообще с соляриса пришел.

man dlopen :

<skipped>...</skipped>

HISTORY The dlopen interface standard comes from SunOS. That system also has dladdr, but not dlvsym.

CONFORMING TO POSIX 1003.1-2003 describes dlclose, dlerror, dlopen, dlsym.

sf ★★ ()
Ответ на: Re: Полустатическая сборка программ от sf

Re: Полустатическая сборка программ

2sf (21.09.2005 14:52:15):

>CONFORMING TO POSIX 1003.1-2003

Ну, значит, теперь -- POSIX.

Я бы поостерегся на последнюю-то версию стандарта закладываться...

Die-Hard ★★★★★ ()
Ответ на: Re: Полустатическая сборка программ от ananas

Re: Полустатическая сборка программ

ananas

> > Компиляция, ессно, g++. А линковка gcc с -lstdc++

> а не проще ли в этом случае ld напрямую юзать?

Для игр с частично статической линковкой, конечно, проще.

А для полностью статической линковки с нестандартными библиотеками проще gcc, меньше зависимостей от версии gcc будет.

Die-Hard ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.