【发布时间】:2014-03-06 09:10:25
【问题描述】:
我在 VisualStudio (2013) 中创建了一组 C++ DLL 及其导入库。到目前为止,这些都是链接器同时生成的。我的 DLL 使用来自其他库的符号,这些符号作为附加依赖项包含在属性/链接版本中。
有时,由于缺少导入库,DLL 生成失败,这对我来说很好,但在这种情况下也没有生成 .lib 文件。即使无法完成 DLL,我也想生成(我的 DLL 的)导入库,以允许其他项目在我能够提供全部内容之前依赖我将导出的符号。
我通过预链接事件命令行找到了一种解决方法,其中:
LIB /DEF:(...)\myLib.def /OUT:(...)\myLib.lib $(IntDir)*.obj
当我有一个 .def 文件时,这正是我需要的。
问题是,我通常没有这样的 .def 文件,而是依赖__declspec(dllexport) 指令,在这种情况下,我没有找到获得正确结果的方法。
我试过了:
LIB /OUT:(...)\myLib.lib $(IntDir)*.obj(#1)
这会创建一个(静态?)lib 文件,而不是导入库,不是我需要的。LIB /DEF /OUT:(...)\myLib.lib $(IntDir)*.obj(#2)
由于缺少(其他)导入库,这会在错误 1104 上失败。
让我更困惑的是,命令行 (#2) 在本应位于此处的库上失败(实际上它们是由链接器找到的)。我想知道我是否应该为 LIB 命令提供完整的 LINK 命令行参数,在这种情况下,这是不行的。
我不是编译/链接工具方面的专家,我担心,我可能做错了事......
有没有人知道不使用 .def 文件来满足我的需求的简单方法?链接器中是否有一个选项可以要求从声明的__declspec(dllexport) 符号创建导入库并在 DLL 无法链接时生成它?
【问题讨论】:
标签: c++ dll linker visual-studio-2013