4

尽管源代码中有 (dllexport) 指令,是否存在一种可能未记录的方法来阻止链接器IMPLIB为 DLL 或 EXE创建?__declspec

指定没有使用默认名称创建的/IMPLIB结果。.LIB

当 declspec 指令来自不受控制的第 3 方代码时,这一点很重要。例如,情况就是这样boost::serialization。一种可能的解决方案是“取消声明”DLL 导出。DEF 文件也不能这样做(AFAIK),因为它只能添加到导出列表而不能从中删除。

4

4 回答 4

2

使用包含用 PRIVATE 关键字标记的导出函数的 .def 文件将告诉链接器跳过将符号放入导入库中。

有关 MSVC 的 .def 文件语法的详细信息,请参阅此 MSDN 页面

于 2013-03-05T01:18:03.407 回答
2

据此,如果您在链接时提供.exp文件,链接器将不会创建.lib文件。不过,老实说,我不知道这对你的情况是否有帮助。

于 2012-04-02T20:33:06.693 回答
2

使用链接器选项没有任何方法可以做到这一点,当链接器使用它来命名 .exp 文件时,使用 /implib:"nul" 会惨遭失败。最实用的解决方案是在构建后再次删除文件。项目 + 属性、构建事件、构建后事件并粘贴:

del $(TargetDir)$(TargetName).lib
del $(TargetDir)$(TargetName).exp

在此处输入图像描述

于 2013-03-03T22:20:02.083 回答
1

许多 3rd 方代码不__declspec(dllexport)直接使用,而是将其隐藏在宏下以便对其进行控制。通常,他们希望根据包含头文件的位置(在 dll 实现内部或由 dll 的用户)之间dllexport进行切换dllimport

如果在您尝试包含的库中是这种情况,那么通过宏操作来更改此行为以满足您的确切需求应该不会太难。

例如,boost::serialization检查config.hpp并查看如何控制它。

于 2013-03-03T16:44:46.670 回答