LINUX.ORG.RU

Можно ли смешивать динамическую и статическую линковку ?


0

0

Есть программа, использующая OpenGL от NVidia, glut, glibc и другие библиотеки. Вот Makefile:
NAME=begin
${NAME}:        ${NAME}.c
                gcc -lGL -lGLU -lglut -lpthread -o ${NAME} ${NAME}.c
                strip --strip-all ${NAME}

При этом библиотеки линкуются динамически.
Как слинковать с glibc статически, а остальные оставить динамически слинкованными ?
★★★★★

Можно и нужно. Но только при условии редистрибьюции бинарного софта.

-Wl,-static -Wl,-lc -Wl,-dynamic

man ld

e
()
Ответ на: комментарий от e

Пробую ... не линкуется.
$ make
gcc -Wl,-static -Wl,-lc -Wl,-dynamic -lGL -lGLU -lglut -lpthread -o begin begin.c
/usr/bin/ld: cannot find -lgcc_s
collect2: ld returned 1 exit status
make: *** [begin] Error 1
$ ls -1sh /lib/libgcc*
32K /lib/libgcc_s.so.1

pacify ★★★★★
() автор топика
Ответ на: комментарий от e

Сработало. Размер бинарника увеличился :)
Но зависимость от динамической библиотеки осталась.
$ make
gcc -Wl,-static -lc -Wl,-Bdynamic -lGL -lGLU -lglut -lpthread -o begin begin.c
$ ldd begin
        libGL.so.1 => /usr/lib/libGL.so.1 (0xb7ed1000)
        libGLU.so.1 => /usr/lib/libGLU.so.1 (0xb7e54000)
        libglut.so.3 => /usr/lib/libglut.so.3 (0xb7e28000)
        libpthread.so.0 => /lib/libpthread.so.0 (0xb7dd7000)
        libc.so.6 => /lib/libc.so.6 (0xb7ca4000)
        libGLcore.so.1 => /usr/lib/libGLcore.so.1 (0xb741e000)
        libnvidia-tls.so.1 => /usr/lib/tls/libnvidia-tls.so.1 (0xb741c000)
  ....
$ ls -1sh begin
492K begin

pacify ★★★★★
() автор топика
Ответ на: комментарий от I3rain

Почитал я, что написано по этим ссылкам, но ничего нового в плане статической линковки не нашел. Вопрос остается.

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