首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用visual可用的工具重命名pdb文件?

用visual可用的工具重命名pdb文件?
EN

Stack Overflow用户
提问于 2017-07-07 07:37:29
回答 1查看 1.1K关注 0票数 1

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

当我们将这个第三方软件集成到我们的代码中时,我们会得到LNK4099警告,因为在所有的机器上,显然不是所有的机器都有烤好的路径。由于第三方软件在一个输出目录中生成多个.lib文件,所以不能将vc<...>.pdb文件与它们一起放置。

因此,我正在寻找一种将pdb名称中的lib文件修补到我控制下的文件的方法。Visual构建工具提供了这样做的方法吗?

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

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

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

代码语言:javascript
复制
/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等工具)。在这里,我可以将生成的库修补到新的pdb名称。

就像这样:

代码语言:javascript
复制
$ 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.lib,如果我现在可以为所有人放置它的话。

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

EN

回答 1

Stack Overflow用户

发布于 2018-03-05 19:57:07

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

代码语言:javascript
复制
/PDBALTPATH:pdb_file_name 

MSDN文章: /PDBALTPATH (使用备用PDB路径)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44965145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档