URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 7041
[ Назад ]

Исходное сообщение
"Статическая и динамическая линковка"

Отправлено krom , 17-Дек-07 07:16 
Привет!

Подскажите пожалуйста - как можно собрать программу, при этом часть либ слинковать динамически, а часть включить статически?

То есть, хочется стандартные либы линковать динамически, а либы boost статически.

Есть сделать так, то линкуются все динамически..

$ cat Makefile
CXX=g++-4.2

main:  main.o
        $(CXX) -o main -l boost_program_options main.o
main.o: main.cpp
        $(CXX) -c -I. main.cpp
$
$ ldd main
        linux-gate.so.1 =>  (0xffffe000)
        libboost_program_options-gcc41-1_34_1.so.1.34.1 => /usr/lib/libboost_program_options-gcc41-1_34_1.so.1.34.1 (0xb7f0f000)
        libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb7e23000)
        libm.so.6 => /lib/libm.so.6 (0xb7dfd000)
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb7df2000)
        libc.so.6 => /lib/libc.so.6 (0xb7ca5000)
        /lib/ld-linux.so.2 (0xb7f6c000)
$

Если указывать ключ static, то все статически, в том числе и куча стандартных либ..


Содержание

Сообщения в этом обсуждении
"Статическая и динамическая линковка"
Отправлено AMDmi3 , 17-Дек-07 17:15 
>Если указывать ключ static, то все статически, в том числе и куча
>стандартных либ..

Либо линковать нужные статически либы как libname.a, либо вот так:

${CXX} -Wl,-static static_libs ... -Wl,-dynamic dynamic_libs ...


"Статическая и динамическая линковка"
Отправлено krom , 19-Дек-07 13:05 
не помогло, или я что-то делаю криво?

$ cat Makefile
CXX=g++-4.2
main:  main.o
        $(CXX) -o main -Wl,-static -lboost_program_options main.o
main.o: main.cpp
        $(CXX) -c -I. main.cpp
$
$ make
g++-4.2 -o main -Wl,-static -lboost_program_options main.o
/usr/bin/ld: cannot find -lgcc_s
collect2: ld returned 1 exit status
make: *** [bpp03] Error 1
$
$ locate gcc_s
/lib/libgcc_s.so.1
/usr/lib/gcc/i486-linux-gnu/3.4.6/64/libgcc_s_64.so
/usr/lib/gcc/i486-linux-gnu/3.4.6/64/libgcc_s.so
/usr/lib/gcc/i486-linux-gnu/3.4.6/libgcc_s_64.so
/usr/lib/gcc/i486-linux-gnu/3.4.6/libgcc_s.so
/usr/lib/gcc/i486-linux-gnu/4.1.2/libgcc_s.so
/usr/lib/gcc/i486-linux-gnu/4.1/libgcc_s.so
/usr/lib/gcc/i486-linux-gnu/4.2/libgcc_s.so
$

попытки указать эту либу и путь к ней ни к чему не привели.. гугл как ни странно тоже не дал внятного ответа на данную проблему :(