当前位置: 首页 > 知识库问答 >
问题:

在不破坏引用的情况下移动静态库的*.pdb文件-LNK4099

韦泳
2023-03-14

我在一个名为 的文件夹中构建了一个第三方静态库,并将得到的*.lib文件复制到我的projects文件夹结构中。除了*.lib之外,我还放置了*.pdb文件。然后我删除了 ,假设不再需要它。这是以前为其他库工作的,它遵循了似乎是一种常见的实践。

但是,当我在调试配置中构建项目时,我会得到许多类似于这样的LNK4099警告(大致翻译):

<myLib>.lib(<someObjFromTheLib>.obj) : warning LNK4099: PDB "<myLib>.pdb" was not found alongside "<myLib.lib>" or "<myBuildDir>". Linking without debug info

我验证了*.pdb文件就在*.lib文件旁边。作为一个测试,我将它放置到构建目录中,正如警告所建议的那样。现在我得到许多这样的LNK4204:

<myLib>.lib(<someObjFromTheLib>.obj) : warning LNK4204: "<myBuildDir>\<myLib>.pdb" is missing debugging information for referencing module; linking object as if no debug info

如何在不破坏任何引用的情况下将pdb文件从临时库构建目录移动到另一个目录?

(旁白:我正在使用cmake编译crypto++V8.2.0,*.pdb文件名为cryptopp-object.pdb,而库名为cryptopp-static.lib。这违反了*.lib和*.pdb具有相同名称的约定,但这就是crypto++的配置方式,如果可能的话,我不想更改这一点。但是,*.lib文件似乎希望它的pdb文件有正确的名称,所以我认为这很好。)

(另外:lib/list .lib 列出了许多*.obj文件,其中只有一些文件出现在我的LNK4099警告中,而其他的则没有。我不知道这是否意味着它们只是在我的项目中没有使用,或者它们是否有所有可用的调试信息。)

共有1个答案

轩辕季同
2023-03-14

事实证明,如果我在完全相同的运行中重新编译并复制lib和pdb,问题似乎就消失了。

究竟为什么结果不是确定性的?

a)因为PDB包含时间戳,而该时间戳在不同的构建上很少相同

 类似资料:
  • 我最近通过从源代码编译在CentOS机器上安装了Python 2.7.3。Python 2.7.3安装在/opt/python2.7上,当我安装它时,我只需更改/usr/bin/Python以指向新版本。这显然是错误的,因为当我这样做的时候,它打破了百胜。我会得到以下内容。 我更改了/usr/bin/python以指向python 2.6.6,但现在2.6.6是python的默认版本。你知道怎么解

  • 为了记录请求和响应,我添加了一个LoggingRequestInterceptor,它实现了ClientHTTPPrequestinterceptor。。。 响应主体是一个流,如果我将其读取到我的拦截器中,TestRestTemplate将无法将其反序列化到我的对象模型中。换句话说,当我调用testRestTemplate时。获取…我将始终获取空对象(即使我看到对象我的响应)。 要解决RestTe

  • 本文向大家介绍Linux中在不破坏磁盘的情况下使用dd命令,包括了Linux中在不破坏磁盘的情况下使用dd命令的使用技巧和注意事项,需要的朋友参考一下 无论你试图从即将坏掉的存储驱动器抢救数据,将归档备份到远程存储,还是在别处对活动分区制作一份完美副本,都要知道如何安全可靠地复制驱动器和文件系统。幸好,有dd这款简单而强大的镜像复制工具,而且历史悠久。在这方面没有比它更出色的工具了。 dd命令的解

  • 假设我有两个类叫做ad。 它们都实现了。 对于只有两种方法,分别称为和。 一切都很好。但是,虽然这似乎很好地利用了s,但我认为如果我需要向这个添加方法,实现就会中断,即我需要去实现这些类中的新方法,这打破了“封闭-开放原则”。 所以我想,除了,如果将来需要添加新方法,我还会使用类。 例如,。 这听起来是个好计划(如果不是,请纠正我)。 但问题是,如果这些类已经有其他类了怎么办?在这种情况下,我不能

  • 帮我理解这个...参见粗体。从标准3.6.3终止(2) 如果一个函数包含一个静态或线程存储持续时间的块作用域对象,该对象已经被破坏,并且该函数在一个静态或线程存储持续时间的对象被破坏期间被调用,如果控制的信息通过了先前被破坏的blockscope对象的识别,则该程序具有未被修改的行为。同样,如果块作用域对象在销毁后被间接使用(即通过指针),则该行为将被忽略。 有人对此有明确的见解吗?

  • 我已经创建了一个在视觉上类似于一张卡(游戏卡)的对象-一张顶部有图像的卡,下面有一些关于该卡的信息,包括文本和符号。页面上可以有许多卡片。 单击一张卡片会将用户带到一个新页面。这是通过使用href将所有卡片元素包装在一个div中完成的。每张卡都有一个带有一些选项的下拉菜单。最初的问题是,单击下拉菜单时,卡也会被单击。 我想在单击下拉菜单时阻止卡被单击。单击下拉菜单时,下拉菜单本身应正常运行。 hr