gpt4 book ai didi

c++ - Visual Studio 中静态链接 OpenSceneGraph 库的未解决外部问题

转载 作者:行者123 更新时间:2023-11-28 05:33:15 25 4
gpt4 key购买 nike

我在我的应用程序中使用 OpenSceneGraph 库,我想静态链接它们,因此我不必使用二进制文件携带 DLL。我已经下载了 OpenSceneGraph 3.4.0 源代码并通过 cmake 生成了 Visual Studio 项目。我确实在 cmake GUI 中禁用了 DYNAMIC_OPENSCENEGRAPHDYNAMIC_OPENTHREADS。之后,我成功编译了 OSG 并拥有了静态库 (.lib)。在我的应用程序中,我在 project properties -> VC++ Directories -> Include Directories & Library Directories 中添加了 include 和 library 目录(顺便说一句,我使用的是 Visual Studio 2013)。我还在 Linker -> General -> Additional Library Directories 中添加了带有 OSG .lib 的目录,并在 Linker -> Input -> Additional Dependencies 中键入了所有必需的库:

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 符号的 Unresolved external 错误。我还尝试将 General -> Character Set 设置为 Unicode,但它没有帮助(在 cmake 生成的 OSG 项目中我有多字节字符)。我现在不知道如何解决这个问题,这是我第一次使用静态链接库编译应用程序。

如果有任何帮助,我将不胜感激。

附言抱歉,没有代码,我无法提供,但我会尽力提供尽可能多的细节。通过动态链接,我可以毫无问题地构建我的应用程序。

最佳答案

我设法自己解决了这个问题。我在 Linker -> Input -> Additional Dependencies 中缺少两个库:

msvcrt.lib
libcmt.lib

而且我还必须在 C/C++ -> Preprocessor -> Preprocessor Definitions 中添加预处理器定义 OSG_LIBRARY_STATIC。最后一件事是在我的 main.cpp 中添加以下几行代码来链接 OSG 插件:

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

现在我的应用程序已成功编译并运行:)

附言在第一次构建时,我遇到了 PNG 和 FreeType 插件的错误,这是由于 libpng 和 freetype 缺少 .lib-s 造成的。在我的案例中,通过将 libpng16_static.libfreetype250.lib 添加到 Linker -> Input -> Additional Dependencies 并将它们复制到我的库目录(显然其他插件将依赖于其他库)。

关于c++ - Visual Studio 中静态链接 OpenSceneGraph 库的未解决外部问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38931378/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com