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

时间:2011-03-23 21:47:42

标签: 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完美配合。

1 个答案:

答案 0 :(得分:1)

在Windows上有很多关于静态链接的怪癖。我有一两个类似的问题,但主要是我的问题是一旦'静态'库被编译它们仍然依赖于.dll在那里。无论如何,我已经感受到你的痛苦已经有一段时间但是为了我的目的而通过它......这是一页真的帮助了我。

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

它与您列出的那些特定库无关,但它可能会为您提供一些线索。有一件事是弄清楚哪个C-runtime库中的每一个.libs(或者你可能想要查看的'_a.libs')都是针对它们进行编译的,并确保它们在你静态链接时都是一样的。因此,既然您正在使用/ MD,请确保所有这些库也使用/ MD而不是/ MT进行编译。这可能是它没有找到那个freetype符号的原因,但它只是一个猜测。祝你好运!