Dll 动态库是否为您链接其他库?

Dll 动态库是否为您链接其他库?,dll,dynamic-linking,Dll,Dynamic Linking,我注意到,当您使用诸如SFML之类的库时,您不必自己链接opengl32.lib,我真的很想知道这是怎么回事,因为我必须在使用我自己的多媒体库(静态库)的项目中链接opengl32?这仅仅是因为SFML库是一个动态库,而opengl32链接在SFML项目中吗? 这不是关于SFML的问题,而是关于所有DLL的问题。如果一个动态库正在使用另一个动态库,它将自动加载到进程中,是的 如果一个动态库正在使用另一个动态库,它将自动加载到进程中,是的 是的,DLL可以引用其他DLL,或者在内部静态编译它们。为

我注意到,当您使用诸如SFML之类的库时,您不必自己链接opengl32.lib,我真的很想知道这是怎么回事,因为我必须在使用我自己的多媒体库(静态库)的项目中链接opengl32?这仅仅是因为SFML库是一个动态库,而opengl32链接在SFML项目中吗?
这不是关于SFML的问题,而是关于所有DLL的问题。

如果一个动态库正在使用另一个动态库,它将自动加载到进程中,是的

如果一个动态库正在使用另一个动态库,它将自动加载到进程中,是的

是的,DLL可以引用其他DLL,或者在内部静态编译它们。为了检查外部依赖关系,Microsoft很久以前开发了一个名为Dependency Walker的工具,在该工具中,您可以拖动DLL或可执行文件,查看它依赖于哪些DLL(从而自动加载)。默认情况下,该工具以前随Visual Studio一起提供,但现在您可以使用它了。该页面解释了关于它的所有其他内容。

是的,DLL可以引用其他DLL,或者在内部静态编译它们。为了检查外部依赖关系,Microsoft很久以前开发了一个名为Dependency Walker的工具,在该工具中,您可以拖动DLL或可执行文件,查看它依赖于哪些DLL(从而自动加载)。默认情况下,该工具以前随Visual Studio一起提供,但现在您可以使用它了。这个页面解释了它的其他一切。

这难道不应该让使用我的多媒体库的开发人员更容易些吗?我的意思是,我猜他们甚至不需要我在构建多媒体DLL时必须链接的库。例如freetype?是的,它可以实现这一点。您当然不想知道库的完整列表,您碰巧使用的一些库需要满足其自身的依赖性。当然,如果您正在制作自己的多媒体DLL,那么希望您隐藏它实际使用的内容,而不要让您的客户机代码看到您正在使用的库(我的意思是,您不希望客户机代码使用freetype,对不对-他们只是说“我想要Courier粗体文本,大小为10”(以某种方式),然后客户端代码发送要打印的字符串…)准确无误。这就是我想要实现的目标。当我通过vc++或gcc构建动态库时,默认情况下会是这样吗?我想我只需要使用freetype的静态库版本?你的DLL必须链接到它直接依赖的任何库,是的。这不应该让使用我的多媒体库的开发人员更容易吗?我的意思是,我猜他们甚至不需要我在构建多媒体DLL时必须链接的库。例如freetype?是的,它可以实现这一点。您当然不想知道库的完整列表,您碰巧使用的一些库需要满足其自身的依赖性。当然,如果您正在制作自己的多媒体DLL,那么希望您隐藏它实际使用的内容,而不要让您的客户机代码看到您正在使用的库(我的意思是,您不希望客户机代码使用freetype,对不对-他们只是说“我想要Courier粗体文本,大小为10”(以某种方式),然后客户端代码发送要打印的字符串…)准确无误。这就是我想要实现的目标。当我通过vc++或gcc构建动态库时,默认情况下会是这样吗?我想我只需要使用freetype的静态库版本?您的DLL必须链接到它直接依赖的任何库,是的。好的,谢谢。但这是否意味着我的多媒体库的用户需要我在其计算机上内部编译的.DLL文件?我想freetype就是一个很好的例子。如果你动态链接它,你自己的DLL将只包含符号引用,所以是的,你也需要发送被引用的DLL,或者让用户单独安装。例如DirectX没有什么不同。好的,谢谢。但这是否意味着我的多媒体库的用户需要我在其计算机上内部编译的.DLL文件?我想freetype就是一个很好的例子。如果你动态链接它,你自己的DLL将只包含符号引用,所以是的,你也需要发送被引用的DLL,或者让用户单独安装。例如DirectX,没有什么不同。