在Visual Studio中静态链接OpenSceneGraph库时无法解析的外部问题
我在我的应用程序中使用OpenSceneGraph库,我想静态链接它们,因此我不必携带二进制文件。我已经下载了OpenSceneGraph 3.4.0源代码并通过cmake生成了Visual Studio项目。我在cmake GUI中禁用了DYNAMIC_OPENSCENEGRAPH
和DYNAMIC_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.对不起,没有代码,我不能提供它,但我尽量给予尽可能多的细节。通过动态链接,我可以构建我的应用程序而不会有任何问
我自己设法解决了这个问题。 我失踪了两个图书馆Linker -> Input -> Additional Dependencies
:
msvcrt.lib
libcmt.lib
而且我也不得不添加预处理器定义OSG_LIBRARY_STATIC
在C/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.lib
和freetype250.lib
添加到Linker -> Input -> Additional Dependencies
并将它们复制到我的库目录(显然其他插件将取决于其他库),解决了错误。