g++编译中遇到undefined reference to `GetAdaptersInfo@8'处理方法

来源:互联网 发布:python虚拟主机 编辑:程序博客网 时间:2024/05/20 23:38

我是个小白  几乎没写过文不会排版所以先把解决方案给出免得废话连篇影响大家心情。


我的方法是在后边用g++的-l(小写哈)指明引用的库文件的库名 形如:  -lwpcap -lwsock32 -liphlpapi

当然我再多句嘴其中小写的-l是g++指令后面紧跟你所用到的库名.库文件一般的全名(姑且就这么说吧我也不知道怎么说)大致都会是libXXX.so 后者libxxx.a其中的xxx就是我们命令中要指明的库名了。

好了方法说完了我说下我的悲惨经历哈,忙的人可以跳过了大笑


说实话我是个懒人,很少写东西,多的是在互联网上索取……但是我最近遇到一个问题着实让我感觉头疼!决定把它记录下,也放上来让遇到相同问题的朋友们参考一下。

由于在进行的一个android项目需要用到C的源码而且个人感觉用java重写那段源码有点那啥(累死人),所以想到了要不用NDK吧。由于以前还没用过,两眼一抹黑啊!度娘、google一番总算把环境搭起来了。随便在网找了个C++写的网络抓包程序源码来测试下这个CDT是否搭建正常。结果怪事就发生了。。。。

 

 

D:\XXXX\XXXX\XXXXX\Debug/../common.cpp:81:undefined reference to `GetAdaptersInfo@8'

D:\XXXX\XXXX\XXXXX\Debug/../common.cpp:96:undefined reference to `GetAdaptersInfo@8'

./common.o: In function`Z18build_PPPOE_PACKET12PPPOE_STATUSPKh':

D:\XXXX\XXXX\XXXXX\Debug/../common.cpp:151:undefined reference to `htons@4'

D:\XXXX\XXXX\XXXXX\Debug/../common.cpp:158:undefined reference to `htons@4'

D:\XXXX\XXXX\XXXXX\Debug/../common.cpp:163:undefined reference to `htons@4'

D:\XXXX\XXXX\XXXXX\Debug/../common.cpp:165:undefined reference to `htons@4'

D:\XXXX\XXXX\XXXXX\Debug/../common.cpp:169:undefined reference to `ntohs@4'

D:\XXXX\XXXX\XXXXX\Debug/../common.cpp:177:undefined reference to `ntohs@4'

D:\XXXX\XXXX\XXXXX\Debug/../common.cpp:178:undefined reference to `ntohs@4'

D:\XXXX\XXXX\XXXXX\Debug/../common.cpp:195:undefined reference to `gethostname@8'

D:\XXXX\XXXX\XXXXX\Debug/../common.cpp:197:undefined reference to `htons@4'

D:\XXXX\XXXX\XXXXX\Debug/../common.cpp:198:undefined reference to `htons@4'

D:\XXXX\XXXX\XXXXX\Debug/../common.cpp:223:undefined reference to `htons@4'

./common.o: In function`Z10SendPacketv':

D:\XXXX\XXXX\XXXXX\Debug/../common.cpp:241:undefined reference to `pcap_sendpacket'

D:\XXXX\XXXX\XXXXX\Debug/../common.cpp:243:undefined reference to `pcap_geterr'

./common.o: In function`Z26build_PAP_AUTH_CREQ_PACKETv':

D:\XXXX\XXXX\XXXXX\Debug/../common.cpp:270:undefined reference to `htons@4'

D:\XXXX\XXXX\XXXXX\Debug/../common.cpp:274:undefined reference to `htons@4'

D:\XXXX\XXXX\XXXXX\Debug/../common.cpp:275:undefined reference to `htons@4'

D:\XXXX\XXXX\XXXXX\Debug/../common.cpp:277:undefined reference to `htons@4'

D:\XXXX\XXXX\XXXXX\Debug/../common.cpp:280:undefined reference to `htons@4'

./common.o:D:\XXXX\XXXX\XXXXX\Debug/../common.cpp:290:more undefined references to `htons@4' follow

./common.o: In function`Z26build_PAP_AUTH_CREQ_PACKETv':

D:\XXXX\XXXX\XXXXX\Debug/../common.cpp:304:undefined reference to `htonl@4'

D:\XXXX\XXXX\XXXXX\Debug/../common.cpp:308:undefined reference to `htons@4'

D:\XXXX\XXXX\XXXXX\Debug/../common.cpp:309:undefined reference to `htons@4'

./common.o: In function`Z20build_LCP_ACK_PACKETPKhb':

D:\XXXX\XXXX\XXXXX\Debug/../common.cpp:325:undefined reference to `ntohs@4'

 

正如你所看到这个错误列表一片鲜红啊!!!

 

由于啥都不懂只好再次搜索了一番  网上大多数大大说这个是没有导入引用包的路径,我如他们所说的将包路径加入到eclipse


运行程序,错误依旧!!!!!这是怎么回事。。。。

 

接下来我又看了很多文章后猜测可能是由于我的交叉编译环境没有弄好,尝试了重新安装MinGW很多次,依然未果。甚至后来我直接把对应的引用到的库文件和include目录都拷贝到了交叉编译器的对应目录下依然报错。就这样我在eclipse的设置包路径目录里进进出出无数次,工程被删除重建无数次之后一个大好的周末就这么没了!!!!

 

最后在第三天下午,我依然坚持不懈的在网上搜索相关的信息百度没有有用的信息,我转到了google上。一番查找后我找到了http://stackoverflow.com/questions/10972794/undefined-reference-to-getadaptersaddresses20-but-i-included-liphlpapi

 

总之大概意思是让我们指明依赖库

然后我就尝试了下在工程目录命令行下(本来想再eclipse中设置的但是我不知道怎么弄在Makefile中改了它编译又自动重新生成了)执行了如下命令

g++ -L"D:\soft\abc\abcdPack\Lib"  –o  "abcd.exe"  ./common.o ./abcd.o  -lwpcap -lwsock32 –liphlpapi

 

哇!!!!! 居然通过了!我欣喜万分!三天啊!啥事儿没做总算成功了。

 

之后我又尝试了将引用的包路径去掉或者减少我后面加上的依赖包名,都不能通过编译。我总算想通了(第一次用g++编译器,可能熟悉的大大们认为这是个笑话)

可能编译器在编译的时候没有正确的指明依赖包名才是导致我一直编译失败的真正原因。终于明白了问题之所在。我想这样手动输入命令太麻烦了,关键是我真心不知道编译指令该怎么写。我只好又回到eclipse中一项一项的查找看看有没有可以修改命令行内容的选项(应为以前模拟器启动的地方可以输入命令调整模拟器大小让我联想到了这里),最终皇天不负有心人我找到了。

 

依次打开eclipse的project --> c/C++ build -> settings ---> MinGW C++ Linker  ---->  libraries 然后添加对应的依赖包的名字设置后保存,回到主界面选中项目后ctrl + B build一下成功通过了!

make all
'Building target: abcd.exe'
'Invoking: MinGW C++ Linker'
g++ -L"D:\soft\abc\WpdPack\Lib" -o "abcd.exe"  ./common.o ./abcd.o   -lwpcap -lwsock32 -liphlpapi
'Finished building target: abcd.exe'

 

嘿嘿,可能很罗嗦以前一直没有写过,大家别见怪哈!希望对某些朋友有用吧!

0 0