c++ - 如何使用 scons 和 Visual C++ 链接到使用静态库本身的静态库?

标签 c++ visual-c++ static-libraries scons

我的 SConstruct 文件看起来像这样:

jnglLibs = Split("freetype png ogg vorbisfile") # left out a few
env.Library(target="jngl", source=source_files, LIBS=jnglLibs)
env.Program("test.cpp", LIBS=Split("jngl") + jnglLibs)

静态库链接正常,但程序失败,来自 jnglLibs 库的未解析外部符号。

lib /nologo /OUT:jngl.lib finally.obj freetype.obj main.obj opengl.obj sprite.ob
j tess.obj texture.obj window.obj windowptr.obj callbacks.obj ConvertUTF.obj aud
io.obj win32\message.obj win32\time.obj win32\window.obj
cl /Fotest.obj /c test.cpp /TP /nologo /EHsc /MD -O2 -DNDEBUG /I.
test.cpp
link /OUT:test.exe /LIBPATH:. /LIBPATH:lib jngl.lib freetype.lib png.lib opengl3
2.lib glu32.lib user32.lib shell32.lib gdi32.lib z.lib jpeg.lib dl.lib openal32.
lib alut.lib ogg.lib vorbisfile.lib test.obj
Microsoft (R) Incremental Linker Version 10.00.30319.01
Copyright (C) Microsoft Corporation.  All rights reserved.

jngl.lib(freetype.obj) : error LNK2019: unresolved external symbol FT_Done_FreeT
ype referenced in function "public: __cdecl jngl::Font::~Font(void)" (??1Font@jn
gl@@QEAA@XZ)
... and so on

为什么它找不到 freetype.lib 中的符号 FT_Done_FreeType?它与 GCC 完美配合。

最佳答案

Windows 上的静态链接有很多怪癖。我遇到过一两个与此类似的问题,但主要是我的问题是一旦编译了“静态”库,它们仍然依赖于 .dll 的存在。不管怎样,我已经感受到你的痛苦有一段时间了,但为了我的目的,我还是挺过来了……这里有一页对我很有帮助。

http://xmlsoft.org/XSLT/tutorial2/libxslt_pipes.html#windows-build

它与您列出的那些特定库无关,但它可能会给您一些线索。一件事是弄清楚每个 .libs(或“_a.libs”,您可能想要查看)是针对哪个 C 运行时库编译的,并确保它们在静态链接时都是相同的。因此,由于您使用的是/MD,因此请确保所有这些库也是使用/MD 而不是/MT 编译的。这可能是它找不到该自由类型符号的原因,但这只是一种猜测。祝你好运!

关于c++ - 如何使用 scons 和 Visual C++ 链接到使用静态库本身的静态库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5412046/

相关文章:

c++ - 查找 C++ 项目中有多少个 goto

html - 对 `htmlcxx::HTML::ParserDom::parseTree(std::string const&)' 的 undefined reference

c++ - Cpp 中的构造函数和变量声明

c++ - Visual C++ "List of Libraries"含义

c++ - 静态 CRT 链接

c++ - 将标题分类为 8 个方向时如何避免 if/else if 链?

c++ - 机器相关的_write失败,错误代码为EINVAL

c++ - RichEdit 的 EM_AUTOURLDETECT 消息可识别链接,但我无法单击它

iphone - 在 Xcode 静态库中包含框架吗?

javascript - 模仿 Firebase 客户端库的结构和模式