Можете ли вы связать зависимости вашего проекта C ++, используя их .objs (и сделать одну DLL)? - PullRequest
0 голосов
/ 29 августа 2009

У меня есть проект C ++ / CLI в VS 2008, который имеет прямую зависимость от нативной библиотеки C ++, которая, в свою очередь, имеет четыре дополнительных зависимости родной библиотеки C и C ++; некоторые из этих зависимых проектов также зависят друг от друга. У меня есть исходный код для всех библиотек, и я могу успешно собрать их все как отдельные библиотеки, но вместо того, чтобы распространять множество сборок, я действительно хотел бы объединить их все в одну библиотеку, содержащую мой управляемый и неуправляемый код.

Проекты зависимостей довольно большие (~ 2000 исходных и заголовочных файлов), поэтому объединить их в «супер-проект» немного громоздко. Учитывая некоторые сообщения в блоге и статьи, которые я прочитал, представляется возможным связать их все вместе; До сих пор моей проблемой было отсутствие документации или учетных записей от первого лица, кто на самом деле пытался это сделать.

Это разумно сделать? Если нет, какие альтернативы мне следует рассмотреть? Существует ли в процессе (-ах) процесс (-ы) построения и / или объединения стратегия, которую необходимо учитывать?

Ответы [ 2 ]

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

Не думаю, что это особенно тривиальная вещь. Конечно, нет какого-либо переключателя компоновщика, который можно использовать для волшебного объединения библиотек DLL в один, поэтому у вас нет другого выбора, кроме как создать новый проект или проекты. Есть также несколько проблем, с которыми вы можете столкнуться, таких как коллизии пространства имен и различные директивы компилятора. Вам также придется каким-то образом объединить точки входа для всех пяти библиотек DLL в финальную библиотеку.

0 голосов
/ 29 августа 2009

Полагаю, поскольку вы говорите об отдельных библиотеках, вы имеете в виду DLL. Поскольку у вас есть исходный код, и вы можете его собрать, вы можете добавить вывод для сборки статической библиотеки. Тогда все статические библиотеки будут связаны с вашей окончательной сборкой C ++ / CLI.

Я немного проделал это с родным C ++ - поместил логику в статическую библиотеку, добавил «настоящую» dll для распространения и exe-модуль для тестирования. Я не понимаю, почему тот же шаблон не будет работать для C ++ / CLI.

...