如何在Code :: Blocks中动态动态库中的静态库

时间:2013-06-08 03:34:39

标签: c++ codeblocks static-linking

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

现在我希望在可执行文件中使用此SWC.dll。但是,当我在可执行文件中仅包含SWC.h文件时,它会获得大量未定义的引用。因为我没有在SWC.h上调用任何函数,所以这里似乎存在问题。所以,我在{。{1}}上添加了我的.exe构建选项,现在它构建时没有错误。但是当我运行它时,它说我需要SWC.a?我错过了什么?

1 个答案:

答案 0 :(得分:0)

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

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

检查Color.h中声明的数据和函数,并确保它们在任何地方都没有用__declspec()进行修饰。如果Color.h中的函数预处理为'SWC'中的__declspec(dllimport),则可能会导致您遇到的问题。