Преобразовать динамическую библиотеку в статическую (Можно ли преобразовать .so в .а)
Модератор: Модераторы разделов
Преобразовать динамическую библиотеку в статическую
Всем привет.
Кто знает, можно ли преобразовать линуксовую .so в .a? Т.е. динамику преобразовать в статику.
Просто раз уж .dll можно преобразовать в .a, то появился вопрос, а можно ли преобразовать .so в .a. Ну и если можно, то как.
Кто знает, можно ли преобразовать линуксовую .so в .a? Т.е. динамику преобразовать в статику.
Просто раз уж .dll можно преобразовать в .a, то появился вопрос, а можно ли преобразовать .so в .a. Ну и если можно, то как.
- Bizdelnick
- Модератор
- Сообщения: 20795
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Преобразовать динамическую библиотеку в статическую
Нельзя. Линковщик не сохраняет в so всю информацию, необходимую для линковки. А если там LTO используется, то и подавно.
А что, можно?
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Re: Преобразовать динамическую библиотеку в статическую
Да можно, сначала в .def потом с помощью dlltool входящего в mingw. Позже собирался выложить рецепт в теме qt5 под windows. Мне надо было собрать драйвер mysql для qt5, а там нужна была статическая библиотека libmariadb.a, которой в сборках под Винду нет. Тот кто ищет найдет решение. Драйвер удалось собрать, осталось протестировать работу.
Сам рецепт конвертации dll в .a тыц, pexports норм собирается под linux и работает без вайна.
- Bizdelnick
- Модератор
- Сообщения: 20795
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Преобразовать динамическую библиотеку в статическую
А. Должен разочаровать: это не то, что Вы думаете. Такая статическая библиотека не является самодостаточной, она нужна для того, чтобы слинковаться с DLL.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Re: Преобразовать динамическую библиотеку в статическую
Хм, что вы понимаете под самодостаточна?Bizdelnick писал: ↑07.09.2020 10:27Такая статическая библиотека не является самодостаточной, она нужна для того, чтобы слинковаться с DLL.
- Bizdelnick
- Модератор
- Сообщения: 20795
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Преобразовать динамическую библиотеку в статическую
Я понимаю под этим то, что в конечном итоге Вы линкуетесь с DLL. Просто без вот этой вот статической либы в винде почему-то этого сделать нельзя, почему так — я не вникал. Чего-то в PE DLL не хватает, что есть в ELF SO.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Re: Преобразовать динамическую библиотеку в статическую
Ну да, если точнее, то эта библиотека включается в .dll и после сборки она уже не нужна. Это я в курсе, только не понял что означают слова, "это не то о чем вы думаете". Я уже испугался что мною собранная dll-ка не заработает как надо.Bizdelnick писал: ↑07.09.2020 10:42Я понимаю под этим то, что в конечном итоге Вы линкуетесь с DLL. Просто без вот этой вот статической либы в винде почему-то этого сделать нельзя, почему так — я не вникал. Чего-то в PE DLL не хватает, что есть в ELF SO.
- Bizdelnick
- Модератор
- Сообщения: 20795
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Преобразовать динамическую библиотеку в статическую
Они означают, что это не есть «преобразование динамической библиотеки в статическую», и что в случае ELF аналогичное действо просто не требуется.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
- Hephaestus
- Сообщения: 3729
- Статус: Многоуважаемый джинн...
- ОС: Slackware64-14.1/14.2
- Контактная информация:
Re: Преобразовать динамическую библиотеку в статическую
ormorph
Если это библиотека "Ваша", то есть собирается из исходников, а не используется сторонний готовый бинарник,
то вполне можно собрать из этих исходников статическую библиотеку. Если уж очень нужно.
Что касается файлов *.lib - это всего лишь архивы типа ar. Внутри либо библиотека dll, либо объектные файлы.
Понятно, что с библиотеками *.so соответствия нет никакого.
Если это библиотека "Ваша", то есть собирается из исходников, а не используется сторонний готовый бинарник,
то вполне можно собрать из этих исходников статическую библиотеку. Если уж очень нужно.
Что касается файлов *.lib - это всего лишь архивы типа ar. Внутри либо библиотека dll, либо объектные файлы.
Понятно, что с библиотеками *.so соответствия нет никакого.
Re: Преобразовать динамическую библиотеку в статическую
Хм, похоже что библиотека qsqlmysql.dll - для сборки которой требовалась статическая библиотека рабочая, так как не ругается на отсутствие Mysql драйвера. Вот только под вайном проверить ни как.
Пока пере собираю вайн с добавил флаг netapi глядишь заработает.
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)
- Bizdelnick
- Модератор
- Сообщения: 20795
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Преобразовать динамическую библиотеку в статическую
Решаете проблемы методом тыка? Иногда срабатывает, конечно, но в этот раз мимо. Для использования ICMP нужно capability CAP_NET_RAW, а не пересборка.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Re: Преобразовать динамическую библиотеку в статическую
Хорошо, и как это заставить работать, команда: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
- Модератор
- Сообщения: 20795
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Преобразовать динамическую библиотеку в статическую
В случае wine — лучше никак, это ж такая дырища в системе будет…
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Re: Преобразовать динамическую библиотеку в статическую
Позже попробую собрать wine-staging, вроде у кого то под ним получалось. В gentoo можно иметь несколько установленных вайнов.
Re: Преобразовать динамическую библиотеку в статическую
Оказалось, dll получился не рабочий, так как что то было с символами в .a. Видно не во всех случаях прокатывает.
Оказалось что линуксовая версия mingw нормально обрабатывает .lib, но нужно прописывать полный путь. Рабочий драйвер mysql для qt5 удалось получить.
Собранный wine-staging норм работает с locallhost и пинги идут тоже норм.
Оказалось что линуксовая версия mingw нормально обрабатывает .lib, но нужно прописывать полный путь. Рабочий драйвер mysql для qt5 удалось получить.
Собранный wine-staging норм работает с locallhost и пинги идут тоже норм.