静态链接库的动态 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的主要内容,如果未能解决你的问题,请参考以下文章