【发布时间】:2011-11-14 16:54:34
【问题描述】:
我有兴趣使用我的静态库来创建一个 dll(隐式链接)。这意味着我需要(在 vs2008 中) 创建一个应生成以下内容的 dll 项目:
- 头文件(具有导出函数声明。这些是使用 .cpp 中的 __declspec(dllexport) 对静态库中的实际函数进行简单包装)
- 导入库,将作为创建 dll 的结果生成
- 实际创建的 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++