2016-08-13 1 views
0

J'utilise des bibliothèques OpenSceneGraph dans mon application et je veux les lier statiquement, donc je n'ai pas besoin de transporter des DLL avec des binaires. J'ai téléchargé les sources OpenSceneGraph 3.4.0 et généré le projet Visual Studio par cmake. J'ai désactivé DYNAMIC_OPENSCENEGRAPH et DYNAMIC_OPENTHREADS dans cmake GUI. Après cela, j'ai réussi à compiler OSG et avoir des bibliothèques statiques (.lib). Dans mon application, j'ai ajouté des répertoires d'inclusion et de bibliothèque dans project properties -> VC++ Directories -> Include Directories & Library Directories (j'utilise Visual Studio 2013 en passant). Je répertoire aussi ajouté avec de .lib dans les OSG Linker -> General -> Additional Library Directories et saisi toutes libs nécessaires à Linker -> Input -> Additional Dependencies:Relations externes non résolues sur la liaison statique Bibliothèques OpenSceneGraph dans Visual Studio

ot20-OpenThreads.lib 
osg130-osg.lib 
osg130-osgUtil.lib 
osg130-osgGA.lib 
osg130-osgDB.lib 
osg130-osgViewer.lib 
osg130-osgText.lib 
opengl32.lib 
osgdb_3ds.lib 
osgdb_freetype.lib 
osgdb_png.lib 

Et je suis toujours à obtenir des erreurs non résolues externals pour les symboles de l'OSG. J'ai également essayé de mettre General -> Character Set à Unicode mais cela n'a pas aidé (dans le projet OSG généré par cmake j'ai le Caractère Multi-Byte de toute façon). Je n'ai aucune idée de comment résoudre cela maintenant, c'est la première fois que je compile une application avec des bibliothèques liées statiques.

J'apprécierais vraiment toute aide.

P.s. Désolé pour aucun code, je ne peux pas le fournir mais j'essaye de donner autant de détails que je peux. Avec la liaison dynamique, je peux créer mon application sans aucun problème.

Répondre

0

J'ai réussi à résoudre ce problème moi-même. je manque deux bibliothèques Linker -> Input -> Additional Dependencies:

msvcrt.lib 
libcmt.lib 

Et je devais aussi ajouter la définition de préprocesseur OSG_LIBRARY_STATIC dans C/C++ -> Preprocessor -> Preprocessor Definitions. La dernière chose a été l'ajout de ces quelques lignes de code dans mon main.cpp pour lier des plugins: OSG

#ifdef OSG_LIBRARY_STATIC 
    USE_OSGPLUGIN(freetype) 
    USE_OSGPLUGIN(png) 
    USE_OSGPLUGIN(3ds) 
#endif 

Maintenant mon application compile avec succès et le travail :)

P.S. Lors de la première génération, j'ai eu des erreurs avec les plugins PNG et FreeType qui étaient causés par l'absence de .lib-s pour libpng et freetype. Là des erreurs ont été résolues dans mon cas en ajoutant libpng16_static.lib et freetype250.lib à Linker -> Input -> Additional Dependencies et en les copiant dans mon répertoire de bibliothèques (évidemment d'autres plugins dépendraient d'autres bibliothèques).