链接到链接其他库的库

时间:2015-07-12 11:55:23

标签: c++ dll sfml dynamic-linking

这个问题是在Windows下使用g ++的动态链接库的上下文中。

请帮我理解一下。 我有一个库,SoundManager,我这样编译:

$(COMPILER) -o ./bin/SoundManager.dll ./src/SoundManager.cpp -shared -Wl,--out-implib,./lib/libSoundManager.a -shared -DSM_BUILD_DLL $(INCLUDE_PATHS) $(STANDARD) $(OPTIONS) $(LIB_PATHS) -lsfml-system -lsfml-audio

也就是说,它是一个包含处理声音播放的类的库,链接到SFML声音库。

现在,我有另一个库MyLibrary,我想在其中使用编译成SoundManager.dll的SoundManager类。我试过这个:

$(COMPILER) -o ./bin/MyLibrary.dll ./src/MyLibrary.cpp -shared -Wl,--out-implib,./lib/libMyLibrary.a -shared -DSW_BUILD_DLL $(INCLUDE_PATHS) $(STANDARD) $(OPTIONS) $(LIB_PATHS) -lSoundManager

最后,我链接到libSoundManager.a。 (LIB_PATHS包含libSoundManager.a所在的路径。)

然而,这不起作用。我收到以下错误消息:

undefined reference to `__imp__ZN2sf5SoundD1Ev'
undefined reference to `__imp__ZN2sf11SoundBufferD1Ev'

这告诉我,我需要链接一些缺少的导入库。如果我添加

-lsfml-system -lsfml-audio

所以我编译MyLibrary:

$(COMPILER) -o ./bin/MyLibrary.dll ./src/MyLibrary.cpp -shared -Wl,--out-implib,./lib/libMyLibrary.a -shared -DSW_BUILD_DLL $(INCLUDE_PATHS) $(STANDARD) $(OPTIONS) $(LIB_PATHS) -lSoundManager -lsfml-system -lsfml-audio

然后编译!

问题:为什么我需要链接

-lsfml-system -lsfml-audio

编译MyLibrary时?我在编译SoundManager时已经链接过它们,当我编译MyLibrary时我链接到libSoundManager.a。难道不能在libSoundManager.a中处理DLL查找表吗?

感谢。

0 个答案:

没有答案