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

时间:2017-07-07 07:37:29

标签: visual-c++ pdb

我们构建的第三方软件,但通常以任何方式修改都有一些奇怪的行为:由于它是作为静态库构建的,因此它创建的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文件到处都是。 现在我们将这些第三方二进制文件提交给给定项目X的VCS。 现在使用项目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位置烘焙的静态库

1 个答案:

答案 0 :(得分:0)

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

root

MSDN Article: /PDBALTPATH (Use Alternate PDB Path)