// redice 7.14
在VC6.0 Win32 Application中使用NetFilter SDK做开发时遇到了一点小麻烦,问题描述如下:
eventHandler.h包含了EventHandler类的声明。
eventHandler.h文件包含了NetFilter SDK的两个头文件, "nfapi.h"和"nfutil.h"。
eventHandler.cpp文件包含eventHandler.h,eventHandler.cpp文件为EventHandler类的成员函数实现。
WebFilter.cpp为WinMain函数所在的文件,它也包含了eventHandler.h。
编译程序的时候,老是提示:
WebFilter.obj : error LNK2005: "int __cdecl nfapi::nf_getProcessName(unsigned long,char *,int)" (?nf_getProcessName@nfapi@@YAHKPADH@Z) already defined in EventHandler.obj
WebFilter.obj : error LNK2005: "void __cdecl nfapi::nf_adjustProcessPriviledges(void)" (?nf_adjustProcessPriviledges@nfapi@@YAXXZ) already defined in EventHandler.obj
反复查看,始终找到不问题的原因...
最终在不经意打开"nfutil.h",顿时恍然大悟,原来nf_getProcessName函数和nf_adjustProcessPriviledges函数的实现过程被放在"nfutil.h"文件中了。VC编译器在编译eventHandler.cpp并生成eventHandler.obj的时候会产生一个nf_getProcessName和nf_adjustProcessPriviledges函数,在编译WebFilter.cpp的时候又会产生一个nf_getProcessName和nf_adjustProcessPriviledges函数。连接的时候,连接器发现有两个“nf_getProcessName和nf_adjustProcessPriviledges”当然会报错了。
上面的程序有点复杂,似乎不太容易说明这个问题,下面用一个简单的程序说明一下:
header.h
void test() {
}
src1.cpp:
#include "header.h"
src2.cpp:
#include "header.h"
编译通过,但是LINK时发生错误:
src2.obj : error LNK2005: "void __cdecl test(void)" (?test@@YAXXZ) already defined in src1.obj
分析:src1.cpp和src2.cpp中都有关于test函数的实现,因此编译的时候会提示"already defined in ..."
vc6连接错误 “error LNK2005: * already defined in *.obj ”问题的解决及分析
[日志分享]
[日志信息]
该日志于 2009-07-14 17:48 由 redice 发表在 redice's Blog ,你除了可以发表评论外,还可以转载 “vc6连接错误 “error LNK2005: * already defined in *.obj ”问题的解决及分析” 日志到你的网站或博客,但是请保留源地址及作者信息,谢谢!! (尊重他人劳动,你我共同努力)
呵呵,谢谢
VaTG790i.最好的<a href=http://www.kyfei.com>网站推广软件</a>,
非常好
....................
;ui;普i;uighur;ui;ui;个
在unix网络编程中看到了关于TCP/IP的一些内容,我感觉还是写的不够。正在下载中,一定
下载地址呢