0

我有这个静态(.a/.lib)库,我想将它绑定到我的动态(.dll)中。假设静态库是libColors.a,动态库是SWC.dll。现在我已经更改了libColors.a项目属性以创建一个静态库——构建它——我还没有找到任何已.dll创建的文件,只有预期的 .o 和 .a 文件。我切换到我的SWC.dll项目并更改其属性以创建一个动态库并选中该框以创建一个 .a 文件——链接——libColors.a构建它——并创建 .dll 文件。(另请注意,我将__declspec(import/export)规范放在其classes 上)

现在我希望它SWC.dll在可执行文件中使用。但是,当我只SWC.h在可执行文件中包含该文件时,它会获得大量未定义的引用。似乎这里有问题,因为我没有在SWC.h. 所以,我在我的 .exe 构建选项中添加了 .exe SWC.a,现在它构建没有错误。但是当我运行它时,它说我需要Colors.dll? 我想念什么?

4

1 回答 1

0

您可以使用 objdump、CFF ExplorerDependency Walker等工具来查看相关 PE-COFF 可执行文件的导入表。

可能的解释是您的Colors项目的编译方式并不是真正的静态库。您可以通过检查SWC.dll测试可执行文件的导入表来检查这一点。您可能会Colors.dll在其中一个中找到一个导入条目,以及它试图导入的函数。

检查声明的数据和函数,Color.h并确保它们没有被__declspec()任何地方装饰。如果Color.h预处理中的功能类似于__declspec(dllimport)“SWC”中的功能,这可能会导致您看到的问题。

于 2013-06-11T02:52:49.010 回答