Внезапно: хочу как в винде (то бишь странного)

IDE, VCS и прочее

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

Ответить
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Внезапно: хочу как в винде

Сообщение Bizdelnick »

Вводная: приходится мне собирать множество софта под очень разные системы. В том числе иногда под винду, будь она неладна. И вот, с матюками переделывая доставшиеся мне в наследство виндовые сборочные скрипты, я обнаружил, что их можно заменить на весьма элегантную конструкцию. Оказалось, что для сборки нет необходимости иметь какие бы то ни было зависимости в виде, извините за выражение, dll, достаточно только заголовочных файлов и текстового файла *.def с описанием ABI библиотеки. Дальше из этого *.def генерится некий *.lib (при посредстве dlltool, если собираем MinGW или lib, если собираем VS), который непосредственно скармливается линковщику.
Выходит, все зависимости для сборки — чисто текстовые, их можно спокойно хранить в git-репозитории. Вот это мне очень понравилось. Отсюда вопрос: нельзя ли провернуть подобную штуку при сборке ELF в этих наших юниксах?
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu
Контактная информация:

Re: Внезапно: хочу как в винде

Сообщение serzh-z »

Не припоминаю, чтобы в VS можно было использовать DEF-файл для импорта. Он использовался только лишь при сборке DLL, чтобы создать .lib-файл, который должен идти в паре с оригинальной DLL.

Bizdelnick писал(а):
12.05.2016 20:12
Отсюда вопрос: нельзя ли провернуть подобную штуку при сборке ELF в этих наших юниксах?
Вроде бы вся инфа, которая из DLL выносится в .lib, для SO-файлов остаётся в них же. Т.е. нельзя.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Внезапно: хочу как в винде

Сообщение Bizdelnick »

serzh-z писал(а):
13.05.2016 13:57
.lib-файл, который должен идти в паре с оригинальной DLL.

Конкретно для сборки сам .dll не нужен, достаточно только .lib.

serzh-z писал(а):
13.05.2016 13:57
инфа, которая из DLL выносится в .lib, для SO-файлов остаётся в них же. Т.е. нельзя.

Да, но теоретически можно ведь выдрать эту инфу при посредстве чего-то вроде objdump, а потом сгенерить фейковый .so, пригодный для ld. Вот мне и интересно, не делал ли кто-нибудь чего подобного. Сходу не нагуглилось.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu
Контактная информация:

Re: Внезапно: хочу как в винде

Сообщение serzh-z »

Bizdelnick писал(а):
13.05.2016 14:30
Конкретно для сборки сам .dll не нужен, достаточно только .lib.
Да, но для этого lib-файла должна где-то существовать совместимая DLL. Т.е. SDK к сторонним библиотекам должен включать в себя не DEF, а lib-файлы.

Bizdelnick писал(а):
13.05.2016 14:30
Да, но теоретически можно ведь выдрать эту инфу при посредстве чего-то вроде objdump, а потом сгенерить фейковый .so, пригодный для ld. Вот мне и интересно, не делал ли кто-нибудь чего подобного. Сходу не нагуглилось.
Посмотри на опции ld. У него можно заменить скрипт линковки своим, например так: gcc ... -Wl,-T=./myldscript (штатные скрипты лежат в - /usr/lib/ldscripts, увидеть результат работы скрипта можно через `-Wl,-Map=foo.map`). Возможно, что можно похачить штатный скрипт так, чтобы он, например, читал информацию не из .so, а из собственного формата, являющимся альтернативой lib-файлам.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Внезапно: хочу как в винде

Сообщение Bizdelnick »

serzh-z писал(а):
13.05.2016 16:34
SDK к сторонним библиотекам должен включать в себя не DEF, а lib-файлы.

Вот это как раз жесть полнейшая, ибо либы от MinGW не всегда дружат с MSVC и наоборот. .def же отлично переносимы. Впрочем, это уже офтопик.

serzh-z писал(а):
13.05.2016 16:34
Посмотри на опции ld. У него можно заменить скрипт линковки своим

Я об этом думал, но не уверен, что мне это настолько надо, чтобы так заморачиваться. Надеялся, что есть готовое решение.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Ответить