Возможно ли связать все библиотеки статически в одном exe?
Теперь у моего проекта в D много разных библиотек. Можно ли связать их статически и сделать один exe (размер не проблема).
Какую команду я должен передать DMD или есть ли способ указать, что это в конфигурации DUB?
1 ответ
Как сказал ratchet freak, вам нужно будет скомпилировать зависимости как сами статические библиотеки. Если у вас есть зависимости как статические библиотеки, вы можете перечислить их в libs
запись о dub.json
как динамические библиотеки.
Это может быть не яркий пример, но вот dub.json
Я использую для управления проектом, который я хочу создавать как статические, так и динамические сборки. Я использую configurations
раздел для разделения статических и динамически связанных сборок. При сборке я использую --config=
флаг для выбора между статической и динамической сборкой.
Если вы сами строите статические библиотеки зависимостей и не хотите помещать их в путь поиска библиотеки вашей системы, вы можете использовать опцию -L в lflags
указать, где находятся статические библиотеки.
Обратите внимание, что статическая компиляция ваших непосредственных зависимостей не обязательно означает, что ваш проект не будет иметь динамических зависимостей - он все равно может динамически связываться с зависимостями ваших зависимостей (если только вы не компилируете их статически). Например, проект, на который я ссылался выше, статически связан с allegro
и его модули, но все еще динамически связаны с зависимостями allegro
лайк libogg
а также libpng
(потому что я не собирал статические версии тех).