静态链接库的动态 DLL

Posted

技术标签:

【中文标题】静态链接库的动态 DLL【英文标题】:Dynamic DLL which statically links a library 【发布时间】:2014-09-23 22:49:38 【问题描述】:

我正在编写一个依赖于 ODBC 的共享库。我想静态链接 ODBC 库,以便我的库的用户不需要安装 ODBC 库。但是,当我的 dll 被链接时,它似乎是动态链接到 odbc 库而不是静态链接到它(这是使用依赖walker 验证的)。是否可以将库静态链接到 dll 中?

我在 Visual Studio 2010 工作。我使用 #pragma comment(lib, "odbc32.lib") 并验证该库是静态库而不是导入库。还有什么问题?

【问题讨论】:

您确定 odbc32.lib 不是导入库吗? Windows 组件通常没有静态库。 ODBC 可能是一个例外,但我不这么认为。当然,Windows 7 SDK 中的odbc32.lib 是一个导入库。您究竟做了什么来验证您正在查看的库是静态库? 另外,odbc32.dll 首先是可选组件吗?我在我的 Windows 功能控制面板中没有看到任何明显相关的内容......也许所有 Windows 机器都有这个库,所以你不必担心? 我正在使用dumpbin /exports "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Lib\odbc32.lib"。难道是dumpbin工具使用不当? Harry,关于 odbc 是一个标准组件的好处。你可能是对的。我在链接一些 SQL Server 驱动程序库以与 odbc 一起使用时也遇到了问题,但是,鉴于以前的 cmets,这听起来不是对这些库的正确使用。 【参考方案1】:

您不需要(也无法获得)静态库; odbc32 是操作系统的一部分,与所有其他 Windows 组件一样,必须动态链接。

【讨论】:

【参考方案2】:

将 Visual Studio 2015/2017 与控制台/win32 应用程序一起使用:

#pragma comment(lib, "odbc32.lib")

就在#include之后....

【讨论】:

正如内容中已经讨论的那样,这是一个导入库,而不是静态库。 Visual Studio 的版本没有区别。

以上是关于静态链接库的动态 DLL的主要内容,如果未能解决你的问题,请参考以下文章

动态链接库和静态链接库的区别简述

动态链接库和静态链接库

关于动态库和静态库的问题。

单例模式 静态库和动态库的区别

动态链接库和静态链接库的区别

Win32编程之静态库编写与使用.动态链接库的编写与使用