禁止导入库创建 - Visual C ++链接器

时间:2012-04-02 16:22:24

标签: c++ visual-c++ dll dllexport import-libraries

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

指定不/IMPLIB会导致使用默认名称创建.LIB

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

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

使用/ implib没有任何方法可以使用链接器选项:当链接器使用它来命名.exp文件时,“nul”会失败。最实用的解决方案是在构建后再次删除文件。 Project + Properties,Build Events,Post-Build事件和粘贴:

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

enter image description here

答案 2 :(得分:2)

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

有关MSVC的.def文件语法的详细信息,请参阅this MSDN page

答案 3 :(得分:1)

许多第三方代码不直接使用__declspec(dllexport),但会将其隐藏在宏下以便对其进行控制。通常,他们希望在dllexportdllimport之间切换,具体取决于头文件的位置(在dll实现中或由dll的用户)

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

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