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

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


我的方法是在后边用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'

 

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

  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用 JavaScript 编写的记忆游戏(附源代码)   项目:JavaScript 记忆游戏(附源代码) 记忆检查游戏是一个使用 HTML5、CSS 和 JavaScript 开发的简单项目。这个游戏是关于测试你的短期 记忆技能。玩这个游戏 时,一系列图像会出现在一个盒子形状的区域 。玩家必须找到两个相同的图像并单击它们以使它们消失。 如何运行游戏? 记忆游戏项目仅包含 HTML、CSS 和 JavaScript。谈到此游戏的功能,用户必须单击两个相同的图像才能使它们消失。 点击卡片或按下键盘键,通过 2 乘 2 旋转来重建鸟儿对,并发现隐藏在下面的图像! 如果翻开的牌面相同(一对),您就赢了,并且该对牌将从游戏消失! 否则,卡片会自动翻面朝下,您需要重新尝试! 该游戏包含大量的 javascript 以确保游戏正常运行。 如何运行该项目? 要运行此游戏,您不需要任何类型的本地服务器,但需要浏览器。我们建议您使用现代浏览器,如 Google Chrome 和 Mozilla Firefox, 以获得更好、更优化的游戏体验。要玩游戏,首先,通过单击 memorygame-index.html 文件在浏览器打开游戏。 演示: 该项目为国外大神项目,可以作为毕业设计的项目,也可以作为大作业项目,不用担心代码重复,设计重复等,如果需要对项目进行修改,需要具备一定基础知识。 注意:如果装有360等杀毒软件,可能会出现误报的情况,源码本身并无病毒,使用源码时可以关闭360,或者添加信任。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值