2016-08-13 117 views
0

我在我的应用程序中使用OpenSceneGraph库,我想静态链接它们,因此我不必携带二进制文件。我已经下载了OpenSceneGraph 3.4.0源代码并通过cmake生成了Visual Studio项目。我在cmake GUI中禁用了DYNAMIC_OPENSCENEGRAPHDYNAMIC_OPENTHREADS。之后,我成功地编译了OSG并且拥有静态库(.lib)。在我的应用程序中,我添加了包含和库目录project properties -> VC++ Directories -> Include Directories & Library Directories(我使用的是Visual Studio 2013)。我在Linker -> Input -> Additional Dependencies还添加了OSG的.lib的目录中Linker -> General -> Additional Library Directories和类型的所有必需的lib:在Visual Studio中静态链接OpenSceneGraph库时无法解析的外部问题

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 

而且我仍然得到了OSG符号无法解析的外部错误。我也尝试将General -> Character Set设置为Unicode,但它没有帮助(在cmake生成的OSG项目中,无论如何我都有多字节字符)。我现在没有任何想法如何解决这个问题,这是我第一次使用静态链接库编译应用程序。

我真的很感激任何帮助。

P.s.对不起,没有代码,我不能提供它,但我尽量给予尽可能多的细节。通过动态链接,我可以构建我的应用程序而不会有任何问

回答

0

我自己设法解决了这个问题。 我失踪了两个图书馆Linker -> Input -> Additional Dependencies

msvcrt.lib 
libcmt.lib 

而且我也不得不添加预处理器定义OSG_LIBRARY_STATICC/C++ -> Preprocessor -> Preprocessor Definitions。的最后一件事是在我main.cpp中加入这几行代码链接OSG插件:

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

现在我的应用程序成功编译和工作:)

附:在第一次构建时,我遇到了由于libpng和freetype缺少.lib-s导致的PNG和FreeType插件的错误。在我的情况下,通过将libpng16_static.libfreetype250.lib添加到Linker -> Input -> Additional Dependencies并将它们复制到我的库目录(显然其他插件将取决于其他库),解决了错误。