LINUX.ORG.RU

прилинковать к .so .a файл


0

0

Написал либу lalala.so нужно ее сделать максимально статической. В ней используется libmysqlclient хотелось бы ее статически прилинковать к lalala.so . Компилирую так: gcc -fPIC lalala.c -shared -o lalala.so -L/usr/lib/mysql -lmysqlclient -static -lm -lz

Где там ошибка? Как сделать максимально переносимый файл чтобы он все статически прилинковал. Собственно задача такая чтобы запустить его на фряхе.


> Собственно задача такая чтобы запустить его на фряхе.

А ничего, что Линукс и Фрибсд - разные операционные системы?

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

Ничего. Аналогичная либа скомпилиная под линуксом загрузилась. Те возможно и чего, но однако.

jeep
() автор топика
Ответ на: комментарий от mv

Так вот в этом и вопрос. По ману, если я не ошибся, гсс должен прилинковать по ключу -static libmysqlclient.a однако он его линкует динамически. Это по размеру видно. Может нужно указать гсс что именно либа с расширением .a используется?

И кстати как посмотреть динамчески иди статически прилинкована библиотека к файлу.

jeep
() автор топика

Это не решение проблемы, просто бросилось в глаза:
-lmysqlclient -static -lm -lz
может правильнее
-static -lmysqlclient -lm -lz

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

Я тоже так сначала подумал. Но это оказалось не так. размер не изменился. Как был 22 кб так он и весит против 2мб либмускулклиент.

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

> Как был 22 кб так он и весит против 2мб либмускулклиент.

А в итоговой .so видно хоть какие-нибудь следы либы .a? Есть подозрение, что нужно приписать -Wl,--whole-archive. А может, даже указывать либу именем файла, а не ключом -l.

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

RE:А в итоговой .so видно хоть какие-нибудь следы либы .a? linux-gate.so.1 => (0xb80dd000) libmysqlclient.so.15 => /usr/lib/libmysqlclient.so.15 (0xb7ede000) libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7d7b000) libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0xb7d61000) libcrypt.so.1 => /lib/tls/i686/cmov/libcrypt.so.1 (0xb7d2f000) libnsl.so.1 => /lib/tls/i686/cmov/libnsl.so.1 (0xb7d16000) libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0xb7cf0000) libz.so.1 => /lib/libz.so.1 (0xb7cda000) /lib/ld-linux.so.2 (0xb80de000) RE:А может, даже указывать либу именем файла, а не ключом -l. О!!! Вот это я и хотел попробовать-как? Как указать ей файл либы а не с ключем -l?

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

> Как указать ей файл либы а не с ключем -l?

пишешь полный путь к файлу .a точно также как к .o и все

lester ★★★★
()
Ответ на: комментарий от anonymous2

> И кстати как посмотреть динамчески иди статически прилинкована библиотека к файлу.

file имя_файла

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