Преобразовать динамическую библиотеку в статическую (Можно ли преобразовать .so в .а)

Модератор: Модераторы разделов

Аватара пользователя
ormorph
Сообщения: 1664
ОС: Gentoo

Преобразовать динамическую библиотеку в статическую

Сообщение ormorph »

Всем привет.
Кто знает, можно ли преобразовать линуксовую .so в .a? Т.е. динамику преобразовать в статику.
Просто раз уж .dll можно преобразовать в .a, то появился вопрос, а можно ли преобразовать .so в .a. Ну и если можно, то как.
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 18294
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Преобразовать динамическую библиотеку в статическую

Сообщение Bizdelnick »

Нельзя. Линковщик не сохраняет в so всю информацию, необходимую для линковки. А если там LTO используется, то и подавно.
ormorph писал(а):
07.09.2020 08:01
раз уж .dll можно преобразовать в .a
А что, можно?
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
ormorph
Сообщения: 1664
ОС: Gentoo

Re: Преобразовать динамическую библиотеку в статическую

Сообщение ormorph »

Bizdelnick писал:
07.09.2020 09:49
А что, можно?
Да можно, сначала в .def потом с помощью dlltool входящего в mingw. Позже собирался выложить рецепт в теме qt5 под windows. Мне надо было собрать драйвер mysql для qt5, а там нужна была статическая библиотека libmariadb.a, которой в сборках под Винду нет. Тот кто ищет найдет решение. Драйвер удалось собрать, осталось протестировать работу.
Сам рецепт конвертации dll в .a тыц, pexports норм собирается под linux и работает без вайна.
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 18294
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Преобразовать динамическую библиотеку в статическую

Сообщение Bizdelnick »

ormorph писал(а):
07.09.2020 10:04
Да можно, сначала в .def потом с помощью dlltool входящего в mingw.
А. Должен разочаровать: это не то, что Вы думаете. Такая статическая библиотека не является самодостаточной, она нужна для того, чтобы слинковаться с DLL.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
ormorph
Сообщения: 1664
ОС: Gentoo

Re: Преобразовать динамическую библиотеку в статическую

Сообщение ormorph »

Bizdelnick писал:
07.09.2020 10:27
Такая статическая библиотека не является самодостаточной, она нужна для того, чтобы слинковаться с DLL.
Хм, что вы понимаете под самодостаточна?
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 18294
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Преобразовать динамическую библиотеку в статическую

Сообщение Bizdelnick »

ormorph писал(а):
07.09.2020 10:38
что вы понимаете под самодостаточна?
Я понимаю под этим то, что в конечном итоге Вы линкуетесь с DLL. Просто без вот этой вот статической либы в винде почему-то этого сделать нельзя, почему так — я не вникал. Чего-то в PE DLL не хватает, что есть в ELF SO.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
ormorph
Сообщения: 1664
ОС: Gentoo

Re: Преобразовать динамическую библиотеку в статическую

Сообщение ormorph »

Bizdelnick писал:
07.09.2020 10:42
Я понимаю под этим то, что в конечном итоге Вы линкуетесь с DLL. Просто без вот этой вот статической либы в винде почему-то этого сделать нельзя, почему так — я не вникал. Чего-то в PE DLL не хватает, что есть в ELF SO.
Ну да, если точнее, то эта библиотека включается в .dll и после сборки она уже не нужна. Это я в курсе, только не понял что означают слова, "это не то о чем вы думаете". Я уже испугался что мною собранная dll-ка не заработает как надо.
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 18294
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Преобразовать динамическую библиотеку в статическую

Сообщение Bizdelnick »

ormorph писал(а):
07.09.2020 11:03
не понял что означают слова, "это не то о чем вы думаете"
Они означают, что это не есть «преобразование динамической библиотеки в статическую», и что в случае ELF аналогичное действо просто не требуется.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
Hephaestus
Сообщения: 3724
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2

Re: Преобразовать динамическую библиотеку в статическую

Сообщение Hephaestus »

ormorph
Если это библиотека "Ваша", то есть собирается из исходников, а не используется сторонний готовый бинарник,
то вполне можно собрать из этих исходников статическую библиотеку. Если уж очень нужно.
Что касается файлов *.lib - это всего лишь архивы типа ar. Внутри либо библиотека dll, либо объектные файлы.
Понятно, что с библиотеками *.so соответствия нет никакого.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:

Аватара пользователя
ormorph
Сообщения: 1664
ОС: Gentoo

Re: Преобразовать динамическую библиотеку в статическую

Сообщение ormorph »

Хм, похоже что библиотека qsqlmysql.dll - для сборки которой требовалась статическая библиотека рабочая, так как не ругается на отсутствие Mysql драйвера. Вот только под вайном проверить ни как.

Shell

$ wine cmd
>ping localhost
002d:err:winediag:IcmpCreateFile Failed to use ICMP (network ping), this requires special permissions.
Pinging localhost [127.0.0.1] with 32 bytes of data:
PING: transmit failed. General failure.
PING: transmit failed. General failure.
PING: transmit failed. General failure.
PING: transmit failed. General failure.

Ping statistics for 127.0.0.1
Packets: Sent = 4, Received = 0, Lost = 4 (100% loss)
Пока пере собираю вайн с добавил флаг netapi глядишь заработает.
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 18294
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Преобразовать динамическую библиотеку в статическую

Сообщение Bizdelnick »

ormorph писал(а):
07.09.2020 20:48
Пока пере собираю вайн с добавил флаг netapi глядишь заработает.
Решаете проблемы методом тыка? Иногда срабатывает, конечно, но в этот раз мимо. Для использования ICMP нужно capability CAP_NET_RAW, а не пересборка.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
ormorph
Сообщения: 1664
ОС: Gentoo

Re: Преобразовать динамическую библиотеку в статическую

Сообщение ormorph »

Bizdelnick писал:
07.09.2020 20:58
Иногда срабатывает, конечно, но в этот раз мимо. Для использования ICMP нужно capability CAP_NET_RAW, а не пересборка.
Хорошо, и как это заставить работать, команда:

Shell

$ sudo setcap cap_net_raw+epi "$(readlink -f "/usr/bin/wine-preloader")"
не помогает.
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 18294
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Преобразовать динамическую библиотеку в статическую

Сообщение Bizdelnick »

ormorph писал(а):
07.09.2020 22:47
Хорошо, и как это заставить работать
В случае wine — лучше никак, это ж такая дырища в системе будет…
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
ormorph
Сообщения: 1664
ОС: Gentoo

Re: Преобразовать динамическую библиотеку в статическую

Сообщение ormorph »

Позже попробую собрать wine-staging, вроде у кого то под ним получалось. В gentoo можно иметь несколько установленных вайнов.
Спасибо сказали:

Аватара пользователя
ormorph
Сообщения: 1664
ОС: Gentoo

Re: Преобразовать динамическую библиотеку в статическую

Сообщение ormorph »

Оказалось, dll получился не рабочий, так как что то было с символами в .a. Видно не во всех случаях прокатывает.
Оказалось что линуксовая версия mingw нормально обрабатывает .lib, но нужно прописывать полный путь. Рабочий драйвер mysql для qt5 удалось получить.
Собранный wine-staging норм работает с locallhost и пинги идут тоже норм.
Спасибо сказали: