windows - 如何删除 Windows 静态库中导出的符号?

标签 windows visual-studio linker

我正在将我的可执行文件与第三方静态库链接,该库是使用传递给 C 编译器的错误定义进行编译的。相同的库也可以作为 DLL 提供,并且编译静态版本以便导出所有符号。这对于静态库来说当然没有意义,因为导出传播到可执行文件(或 DLL),这样的库将集成到其中。

当我将可执行文件与该库链接时,该库中的符号将从可执行文件中导出。我不关心生成的 .lib 和 .exp 文件。我需要删除可执行文件本身中导出的符号。

我需要的是一种方法:

  1. 强制清除链接器的导出符号列表,或者

  2. 编辑从库中提取的目标文件以“取消导出”符号。

我正在使用 Visual Studio 2012 来构建该项目。该库以 .LIB 文件形式提供,我可以使用库管​​理器提取目标文件和 dumpbin 来确认导出符号的存在。

目前我不想麻烦供应商来修复它,或者更确切地说,我不希望他们在我变老之前回复。

最佳答案

要完全覆盖从链接过程中创建的 PE 镜像(.exe 或 .dll)导出的符号,必须链接到 .exp 文件。只是linking with a .def file只能将符号添加到导出列表中,而不能从其中删除。

  1. 创建 .def 文件。如果您不想导出任何内容,它将几乎为空:

    NAME "YourExecutableBaseName"
    

    这适用于 YourExecutableBaseName.exeYourExecutableBaseName.dll.def 中的基本名称应与链接器的输出文件名匹配,否则会出现警告。

  2. 使用LIB.def文件创建.exp文件。

  3. Link the executable with this .exp file 。此导出文件完全定义了所有导出的符号,链接器不会导出不存在的任何内容。

关于windows - 如何删除 Windows 静态库中导出的符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19040437/

相关文章:

python - 在 Python 中解释 ffmpeg 输出

windows - 批处理文件 : start at high priority with cmd blocked

visual-studio - Visual Studio 中的共享模板

c++ - gcc 链接器描述文件强制符号位于特定地址

python - Windows 上没有控制台的 Cython

在运行时更改标签颜色

visual-studio - 未为 xaml 安装 VS 2008 设计器

c - 在 C 中执行 shellcode (visual studio 2017

c++ - 关于 C++ 中名称修饰的问题

eclipse - 使用 Eclipse 的 C 项目上的链接器错误