2009-08-28 4 views
0

J'ai un projet C++/CLI dans VS 2008 qui dépend directement d'une bibliothèque C++ native qui, à son tour, a quatre dépendances de bibliothèque C et C++ natives supplémentaires; Certains de ces projets dépendent aussi les uns des autres. J'ai le code source pour toutes les bibliothèques et je peux les construire avec succès en bibliothèques séparées, mais au lieu d'avoir une multitude d'assemblées à distribuer, j'aimerais vraiment les consolider dans une seule DLL contenant mon code managé et non managé. Les projets de dépendance sont plutôt volumineux (~ 2000 fichiers source et d'en-tête), donc les fusionner en un 'super-projet' est un peu compliqué. Compte tenu de certains des articles de blog et des articles que j'ai lus, il semble possible de les lier tous ensemble; Jusqu'à présent, mon défi a été le manque de documentation ou de comptes rendus à la première personne de quiconque essayait de le faire.Pouvez-vous lier les dépendances de votre projet C++ en utilisant leur .objs (et créer une seule DLL)?

Est-ce quelque chose qui peut raisonnablement être fait? Si non, quelles alternatives devrais-je envisager? Y a-t-il une stratégie dans le processus de construction et/ou de liaison qui doit être considérée?

Répondre

0

Je suppose que puisque vous parlez de bibliothèques séparées, vous voulez dire des DLL. Puisque vous avez la source et pouvez les construire, vous pouvez ajouter une sortie de construction de la bibliothèque statique. Ensuite, toutes les bibliothèques statiques seraient liées dans votre DLL d'assemblage C++/CLI finale.

Je l'ai fait un peu avec C++ natif - mettre la logique dans une bibliothèque statique, ajouter une DLL "réelle" pour la distribution, et un test exe unité pour le test. Je ne vois pas pourquoi le même modèle ne fonctionnera pas pour C++/CLI.

1

Je ne pense pas que ce soit une chose particulièrement triviale à faire. Il n'y a certainement pas de commutateur de linker que vous pouvez utiliser pour combiner magiquement les DLL en une seule, vous n'avez donc pas beaucoup d'autre choix que de créer un nouveau projet ou de nouveaux projets. Vous pouvez également rencontrer quelques problèmes, tels que les collisions d'espaces de noms et les directives de compilation différentes. Vous devrez également fusionner les points d'entrée pour les cinq DLL en quelque sorte dans votre DLL finale.

Questions connexes