Возможно ли связать все библиотеки статически в одном exe?

Теперь у моего проекта в D много разных библиотек. Можно ли связать их статически и сделать один exe (размер не проблема).

Какую команду я должен передать DMD или есть ли способ указать, что это в конфигурации DUB?

1 ответ

Решение

Как сказал ratchet freak, вам нужно будет скомпилировать зависимости как сами статические библиотеки. Если у вас есть зависимости как статические библиотеки, вы можете перечислить их в libs запись о dub.json как динамические библиотеки.

Это может быть не яркий пример, но вот dub.json Я использую для управления проектом, который я хочу создавать как статические, так и динамические сборки. Я использую configurations раздел для разделения статических и динамически связанных сборок. При сборке я использую --config= флаг для выбора между статической и динамической сборкой.

Если вы сами строите статические библиотеки зависимостей и не хотите помещать их в путь поиска библиотеки вашей системы, вы можете использовать опцию -L в lflags указать, где находятся статические библиотеки.

Обратите внимание, что статическая компиляция ваших непосредственных зависимостей не обязательно означает, что ваш проект не будет иметь динамических зависимостей - он все равно может динамически связываться с зависимостями ваших зависимостей (если только вы не компилируете их статически). Например, проект, на который я ссылался выше, статически связан с allegro и его модули, но все еще динамически связаны с зависимостями allegro лайк libogg а также libpng (потому что я не собирал статические версии тех).

Другие вопросы по тегам