2

我尝试使用 LIbrarian > Command Line 中的以下选项

/OUT:"mylib.lib" "mylib.dll" /DEF:"mydef.def"

但是,它只生成了静态库。当我的 DLL 文件名在/OUT指令之前时,它只生成 DLL,而不生成 LIB。

我只是想为我的库创建 DLL 和 LIB 文件,而无需使用__declspec(dllimport)__declspec(dllexport)

有人可以帮我吗

4

3 回答 3

3

试试这个:

/OUT:"mylib.dll" /IMPLIB:"mylib.lib" /DEF:"mydef.def" /DLL

从命令行,您需要/DLL/IMPLIB不是绝对必要的,因为默认名称将取决于您的 DLL 名称。

从 IDE 编译时,编译器有一个/LD参数,可确保将/DLL其传递给链接器。因此,如果您自己构建命令行,则需要明确说明。

于 2013-10-08T11:10:01.960 回答
2

你把事情搞混了。“Librarian > Command Line”设置仅在构建静态库项目时使用。输出文件扩展名应为 .lib,/DEF 选项不适用。.lib 输出文件本身不是可执行文件,静态库只是简单的 .obj 文件包。稍后需要在构建 EXE 或 DLL 的另一个项目中使用它们才能有用。

DLL 是完全不同的动物,它是一种可执行文件格式,/DEF 选项可用于命名导出的函数。当链接器构建 .dll 时,它还将为DLL创建一个 .lib 文件。这不是静态库,它是 DLL 的导入库。一个只包含导出函数名称的小文件,它与静态库没有相似之处。当您构建另一个使用该 DLL 的项目时,您可以使用它。

不知道你是如何进入这个泡菜的,我假设你刚开始使用错误的项目模板。文件 + 新项目、Visual C++、Win32、Win32 项目。好的,接下来,选择“应用程序类型”设置的“DLL”单选按钮。您的项目现在已正确配置为生成 DLL 和 LIB。使用链接器、输入、模块定义文件设置来指定您的 DEF 文件。

于 2013-10-08T11:47:58.287 回答
0

如果您只想从同一个源构建一个 DLL 和一个静态链接库,您可以在一个解决方案中创建两个项目 - 一个 DLL 项目和一个静态库项目 - 并将它们指向相同的源文件。重建解决方案、presto!、DLL 和静态库。:^)

于 2013-12-04T18:15:48.987 回答