Visual Studio Linker Warning LNK4099
Posted 小马识图
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Visual Studio Linker Warning LNK4099相关的知识,希望对你有一定的参考价值。
在Visual Studio 下链接debug 版本的程序的时候,要求被链接的目标文件对应的pdb存在,这就要求依赖库在发布debug版本的时候也一并把pdb 文件发布。 如果链接的时候找不到pdb文件就会有这个Warning 消息跳出来。 那么链接器是怎么知道链接到哪个pdb文件的呢? 参考MSDN上的这篇文章 . 可以知道链接的pdb文件名,但是需要注意的是,pdb文件名对于库里面的每个目标文件都是独立的, 也就是说一个lib里面所包含的每个.obj文件的关联pdb文件都可以不一样。当然一般情况下都是一样的。
按照下面的步骤我们来看看如果获取某个库(.lib)下面某个目标文件(.obj)对应的pdb文件名。假设我们现在链接到opencv_highgui310d.lib这个库,然后链接时候报出Warning,说这个库里面的window.obj的pdb文件找不到,我们该如何确定window.obj相关联的pdb文件呢?
- 列出opencv_highgui310d.lib的目标成员:
命令:
lib /LIST opencv_highgui310d.lib
输出:
opencv_highgui.dir\\Debug\\window.obj
opencv_highgui.dir\\Debug\\window_w32.obj
opencv_highgui.dir\\Debug\\opencv_highgui_pch.obj
- 从opencv_highgui310d.lib中提取window.obj文件:
命令:
lib /EXTRACT:opencv_highgui.dir\\Debug\\window.obj opencv_highgui310d.lib
该命令在当前目录下生成了window.obj文件
- 从window.obj提取编译时的关联pdb文件路径和名称:
命令:
dumpbin /section:.debug$T /rawdata window.obj
输出 :
Dump of file window.obj
File Type: EXTENDED COFF OBJECT
SECTION HEADER #3
.debug$T name
0 physical address
0 virtual address
70 size of raw data
4236 file pointer to raw data (00004236 to 000042A5)
0 file pointer to relocation table
0 file pointer to line numbers
0 number of relocations
0 number of line numbers
42100040 flags
Initialized Data
Discardable
1 byte align
Read Only
RAW DATA #3
00000000: 04 00 00 00 6A 00 15 15 74 8C 65 6D CD CA 70 4F ....j...t.emÍÊpO
00000010: B8 DF 83 D1 3F 04 86 FE 02 00 00 00 44 3A 5C 50 ¸ß.Ñ?..þ....D:\\P
00000020: 72 6F 6A 65 63 74 73 5C 66 72 61 6D 65 77 6F 72 rojects\\framewor
00000030: 6B 2D 6C 69 62 73 5C 76 73 32 30 31 35 2D 77 69 k-libs\\vs2015-wi
00000040: 6E 36 34 5C 6F 70 65 6E 63 76 33 2E 31 5C 6C 69 n64\\opencv3.1\\li
00000050: 62 5C 44 65 62 75 67 5C 6F 70 65 6E 63 76 5F 68 b\\Debug\\opencv_h
00000060: 69 67 68 67 75 69 33 31 30 64 2E 70 64 62 00 F1 ighgui310d.pdb.ñ
这样我们就很清晰的看到了编译opencv_highgui310d.lib时,在D:\\Projects\\framework-libs\\vs2105-win64\\opencv3.1\\lib\\Debug\\目录下一并生成了opencv_highgui310d.pdb文件。现在去编译机器上相应的目录下面把这个pdb文件拷贝到你当前机器的opencv_highgui310d.lib同一个目录下,问题就解决了!
以上是关于Visual Studio Linker Warning LNK4099的主要内容,如果未能解决你的问题,请参考以下文章
__attribute__ ((warn_unused_result)) 的 Visual Studio 等效项
使用 Visual Studio 2010 在 Nvidia GEFORCE 上的 OpenCL 代码