Объедините несколько DLL в 1 - PullRequest
3 голосов
/ 29 августа 2010

Мне интересно, возможно ли объединить несколько библиотек DLL в 1. В настоящее время я работаю над проектом C ++, который зависит от многих динамических библиотек, поэтому возможно ли объединить их в 1 файл DLL, и еслиИтак, как бы я это сделал?

Ответы [ 3 ]

5 голосов
/ 29 августа 2010

У меня есть исходный код для этих DLL, да.

Просто объедините все исходные файлы из всех проектов DLL в один проект DLL?А если у вас есть несколько файлов * .def (по одному для каждого проекта), объедините их в один файл * .def.

2 голосов
/ 29 августа 2010

Реально, нет.Теоретически, если вы хотите достаточно сильно, вы можете сделать что-то вроде разборки их всех, затем собрать все отдельные файлы в объектные файлы, а затем заново связать эти объектные файлы в одну большую DLL.Однако заставить его работать на самом деле было бы нетривиально - могут быть такие вещи, как конфликтующие имена символов, которые потребуют значительных усилий, чтобы обойти.в zip-файл (или как вам удобнее) и запустите небольшую программу, чтобы распаковать их во временный каталог, запустить основную программу, а затем стереть библиотеки DLL из этого каталога.Это имеет несколько собственных проблем (например, оставляя копии файлов, если машина выходит из строя / теряет питание / что-то во время выполнения).

Редактировать: так как у вас есть исходный код, используяэто сделать весь код в одну DLL гораздо разумнее.По большей части, это просто вопрос добавления всех исходных файлов в один проект, который создает одну DLL в качестве вывода.Вы можете (легко) столкнуться с некоторыми конфликтами символов.При наличии доступа к исходному коду очевидный способ справиться с этим - поместить вещи в пространства имен.

1 голос
/ 29 августа 2010

Это, конечно, не невозможно. Формат Dll содержит всю информацию, необходимую для объединения кода и данных из нескольких dll в один, и перебазирования полученного кода.

это не стандартная особенность любого набора инструментов, о котором я могу подумать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...