【问题标题】:utilizing a static library to create an import library利用静态库创建导入库
【发布时间】:2011-11-14 16:54:34
【问题描述】:

我有兴趣使用我的静态库来创建一个 dll(隐式链接)。这意味着我需要(在 vs2008 中) 创建一个应生成以下内容的 dll 项目:

  1. 头文件(具有导出函数声明。这些是使用 .cpp 中的 __declspec(dllexport) 对静态库中的实际函数进行简单包装)
  2. 导入库,将作为创建 dll 的结果生成
  3. 实际创建的 dll。

我制作了一个测试程序,将利用上述 dll(包括导入库/头文件)对其进行测试。 在这我已经包括了所有三个项目。现在exe编译/链接没有问题。 但是在 main.cpp 中,当我调用导出的函数(使用关联的 __declspec(dllimport) 调用时,它似乎永远不会执行。我不确定这是为什么? 它几乎就像即使 exe 可以在 dll 中看到导出的函数...... dll 不能调用静态库中的代码?

我无法回答为什么我的 exe 看不到静态库中的代码?我是否需要一个用于 vs2008 的存档器/图书管理员来将所有这些 obj 文件作为导入库的一部分包含在内? 我很茫然,不知道如何测试这个?

除了将我的静态库直接制作成 dll 之外。我想试试这个方法。我知道我错过了一些东西......我已经阅读了所有的地方,我只是被困住了。这里有一些线程有一些人发布了类似的内容,但我似乎无法理解。请尽可能详细,因为我是新手。再次感谢。

更新 1: 好的,所以目前我将 extern 行添加到函数原型中,现在它可以看到从 dll 导出的函数。但是,现在剩下的唯一问题是:

我无法调用此导出函数(又名包装器)试图调用的函数。恰好在静态库中。我的 exe 应该如何获得该静态库函数的可见性。我知道这是可以做到的,因为我认为董事会上还有一个人能够完成这项工作。

更新 2:我的设置和这个提问者一模一样... How to force inclusion of an object file in a static library when linking into executable?

但我没有使用显式链接。我正在使用隐式链接。我真正的问题是如何在导出到 exe 的 dll 包装器中调用静态库函数?

【问题讨论】:

  • “它从不似乎执行”是什么意思?您是否尝试过单步执行代码?
  • 基本上是在我运行 exe 时。它似乎从来没有调用导出的函数...我不知道为什么...

标签: c++


【解决方案1】:

如果应用程序和 DLL 是 MFC 应用程序/dll,则确保应用程序和所有 dll 是“调试”版本或“发布”版本,而不是混合版本。

【讨论】:

  • 是的,这不是问题。它们都是作为发行版构建的。我认为如果不是,那么您会收到很多警告等。不,那不是问题..
猜你喜欢
  • 1970-01-01
  • 2011-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-25
相关资源
最近更新 更多