使用visual studio可用工具重命名pdb文件?

问题描述 投票:1回答:1

我们构建但通常不以任何方式修改的第三方软件具有一些奇怪的行为:由于它是作为静态库构建的,因此它创建的PDB文件称为vc.pdb,位于软件的中间文件夹中。现在它创建了大约12个pdb文件,所有这些文件都在不同的文件夹中,所有文件都具有不同库和不同配置的相同名称。

当我们在代码中集成这个第三方软件时,我们得到了LNK4099警告,因为pdb的烘焙路径显然不存在于所有机器上。由于第三方软件在一个输出目录中生成多个.lib文件,我们无法放置vc .pdb文件和它们一起。

所以我正在寻找一种方法来将pdb名称中的lib文件修补为我控制下的内容。 Visual Studio构建工具是否提供了这样做的方法?

编辑:让我更详细地解释一下我们在做什么:我们决定在我们的项目中集成一些第三方静态库。该项目本身作为源包。一个开发人员或构建服务器或构建此源程序包的人员,该程序包生成静态链接的libs,在各种构建配置中称为a.lib和b.lib。使用它们时,默认的visual studio配置会生成vc110.pdb文件,因为它们被称为完全相同的VS会自动将它们放入$(IntDir)中。所以pdb文件到处都是。现在我们将这些第三方二进制文件提交给我们的VCS用于给定的项目X.现在使用项目X中的静态库的人必须将它们链接到最终的二进制文件。这是生成LNK4099的时间,因为pdb文件不在VCS中且在此计算机上不可用。

但是我们实际上无法提交所有vc110.pdb文件,因为这没用。由于完整限定路径构建到静态库中,因此没有其他用户能够复制该路径。在链接期间,找不到PDB的完整路径,因此它在lib文件的位置中查找vc110.pdb。由于第三方软件包决定将a.lib和b.lib放在同一目录中,除非我们修改第三方软件包的构建并重命名vcxproj中的pdb文件,否则我们永远无法正确放置pdb文件。将lib的生成拆分为不同的目录(也在vcxproj中)。

这就是重点:我不想随时修改第三方的构建文件,我希望能够使用这个第三方软件包的简单新下载并使用一些“简单”批处理脚本构建它。此包的默认结果是:

/Bin
    /Debug
        a.lib
        b.lib
    /Release
        a.lib
        b.lib
/Temp
    /A
        /Debug
            vc110.pdb
        /Release
            vc110.pdb
    /B
        /Debug
            vc110.pdb
        /Release
            vc110.pdb

我真正想要的是在构建之后修补生成的文件。我的“简单”批处理(或其他)脚本可以例如将pdb文件重命名为a.pdb和b.pdb,这当然是不够的,因为链接器仍然会查找vc110.pdb,因为它是已编译的名称。这就是为什么我正在寻找一种方法(通过像lib或dumpbin这样的工具),我可以将生成的lib修补到新的pdb名称。

像那样:

$ magic /showPDB a.lib
> D:\some_users_machine\unique_path\package\Temp\A\Debug.vc110.pdb

$ magic /newPDB a.lib d:\path\a.pdb
> New PDB name is d:\path\a.pdb

当消费者然后链接我的修补的a.lib时,它不会尝试在上面的路径中查找a.pdb。它当然也不会在大多数机器上找到,但是接着者也会在a.lib所在的位置寻找a.pdb,那就是我现在可以为所有人放置它。

编辑2:由于意见基础关闭:我正在寻找一种技术方法来修改pdb位置中的静态库

visual-c++ pdb
1个回答
0
投票

看一下链接器选项/ PDBALTPATH。这允许您指定将嵌入到二进制文件中的不同PDB路径。

/PDBALTPATH:pdb_file_name 

MSDN Article: /PDBALTPATH (Use Alternate PDB Path)

© www.soinside.com 2019 - 2024. All rights reserved.