Вводная: приходится мне собирать множество софта под очень разные системы. В том числе иногда под винду, будь она неладна. И вот, с матюками переделывая доставшиеся мне в наследство виндовые сборочные скрипты, я обнаружил, что их можно заменить на весьма элегантную конструкцию. Оказалось, что для сборки нет необходимости иметь какие бы то ни было зависимости в виде, извините за выражение, dll, достаточно только заголовочных файлов и текстового файла *.def с описанием ABI библиотеки. Дальше из этого *.def генерится некий *.lib (при посредстве dlltool, если собираем MinGW или lib, если собираем VS), который непосредственно скармливается линковщику.
Выходит, все зависимости для сборки — чисто текстовые, их можно спокойно хранить в git-репозитории. Вот это мне очень понравилось. Отсюда вопрос: нельзя ли провернуть подобную штуку при сборке ELF в этих наших юниксах?
Внезапно: хочу как в винде (то бишь странного)
Модератор: Модераторы разделов
-
- Модератор
- Сообщения: 21173
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Внезапно: хочу как в винде
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
-
- Бывший модератор
- Сообщения: 8259
- Статус: Маньяк
- ОС: Arch, Fedora, Ubuntu
Re: Внезапно: хочу как в винде
Не припоминаю, чтобы в VS можно было использовать DEF-файл для импорта. Он использовался только лишь при сборке DLL, чтобы создать .lib-файл, который должен идти в паре с оригинальной DLL.
Вроде бы вся инфа, которая из DLL выносится в .lib, для SO-файлов остаётся в них же. Т.е. нельзя.Bizdelnick писал(а): ↑12.05.2016 20:12Отсюда вопрос: нельзя ли провернуть подобную штуку при сборке ELF в этих наших юниксах?
-
- Модератор
- Сообщения: 21173
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Внезапно: хочу как в винде
Конкретно для сборки сам .dll не нужен, достаточно только .lib.
Да, но теоретически можно ведь выдрать эту инфу при посредстве чего-то вроде objdump, а потом сгенерить фейковый .so, пригодный для ld. Вот мне и интересно, не делал ли кто-нибудь чего подобного. Сходу не нагуглилось.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
-
- Бывший модератор
- Сообщения: 8259
- Статус: Маньяк
- ОС: Arch, Fedora, Ubuntu
Re: Внезапно: хочу как в винде
Да, но для этого lib-файла должна где-то существовать совместимая DLL. Т.е. SDK к сторонним библиотекам должен включать в себя не DEF, а lib-файлы.Bizdelnick писал(а): ↑13.05.2016 14:30Конкретно для сборки сам .dll не нужен, достаточно только .lib.
Посмотри на опции ld. У него можно заменить скрипт линковки своим, например так: gcc ... -Wl,-T=./myldscript (штатные скрипты лежат в - /usr/lib/ldscripts, увидеть результат работы скрипта можно через `-Wl,-Map=foo.map`). Возможно, что можно похачить штатный скрипт так, чтобы он, например, читал информацию не из .so, а из собственного формата, являющимся альтернативой lib-файлам.Bizdelnick писал(а): ↑13.05.2016 14:30Да, но теоретически можно ведь выдрать эту инфу при посредстве чего-то вроде objdump, а потом сгенерить фейковый .so, пригодный для ld. Вот мне и интересно, не делал ли кто-нибудь чего подобного. Сходу не нагуглилось.
-
- Модератор
- Сообщения: 21173
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Внезапно: хочу как в винде
Вот это как раз жесть полнейшая, ибо либы от MinGW не всегда дружат с MSVC и наоборот. .def же отлично переносимы. Впрочем, это уже офтопик.
Я об этом думал, но не уверен, что мне это настолько надо, чтобы так заморачиваться. Надеялся, что есть готовое решение.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |