gcc编译器对‘sqrt’未定义的引用与对‘pow’未定义的引用

作者: 云计算机网 分类: 云主机 发布时间: 2017-06-21 02:58

linuxidc@linuxidc:~/linuxidc.com$ gcc linuxidc.c -o linuxidc.com

在使用gcc编译c时提示

/tmp/cchJksha.o:在函数primersquo;中:
linuxidc.c:(.text+0x11):对sqrtrsquo;未定义的引用
/tmp/cchJksha.o:在函数mainrsquo;中:
linuxidc.c:(.text+0x9f):对powrsquo;未定义的引用
collect2: error: ld returned 1 exit status

gcc编译的时候也要在指令后面加 -lm:

linuxidc@linuxidc:~/linuxidc.com$ gcc linuxidc.c -o linuxidc.com -lm

gcc 编译器对sqrtrsquo;未定义的引用与对powrsquo;未定义的引用

即可编译成功。

原因:缺少某个库,用 -l 参数将库加入。Linux的库命名是一致的, 一般为 libxxx.so, 或 libxxx.a, libxxx.la, 要链接某个库就用 -lxxx,去掉头 lib 及 "." 后面的 so, la, a 等即可。

常见的库链接方法为:数学库 -lm; posix 线程 -lpthread

gcc编译时对rsquo;xxxxrsquo;未定义的引用问题

在使用gcc编译的时候有时候会碰到这样的问题,编译为.o(obj) 文件没有问题,但是编译(这一步应该是链接)为可执行文件的时候会出现找不到rsquo;xxxrsquo;的定义的情况。

例如:

g++ -o spider -rdynamic -lpthread -levent -lcrypt -ldl bloomfilter.o confparser.o crc32.o dso.o hashs.o md5.o qstring.o sha1.o socket.o spider.o threads.o url.o
...

dso.o:在函数dso_load(char const*, char const*)rsquo;中:
dso.cpp:(.text+0x3c):对dlopenrsquo;未定义的引用
dso.cpp:(.text+0x4c):对dlsymrsquo;未定义的引用
dso.cpp:(.text+0xb5):对dlerrorrsquo;未定义的引用
dso.cpp:(.text+0x13e):对dlclosersquo;未定义的引用

原因

出现这种情况的原因,主要是C/C++编译为obj文件的时候并不需要函数的具体实现,只要有函数的原型即可。但是在链接为可执行文件的时候就必须要具体的实现了。如果错误是未声明的引用,那就是找不到函数的原型,解决办法这里就不细致说了,通常是相关的头文件未包含。

解决办法

指定原因就好办了,既然知道是缺少了函数的具体实现,那么就给它这个函数的实现就好了。比如上面的例子,是因为缺失了dlopen、dlsym、dlerror、dlclose这些函数的实现,这几个函数是用于加载动态链接库的,编译的时候需要添加-ldl来使用dl库(这是静态库,在系统目录下/usr/lib/i386-linux-gnu/libdl.a、/usr/lib/x86_64-linux-gnu/libdl.a)。

但是看上面编译的时候是有添加-ldl选项的,那么为什么不行呢?

gcc 依赖顺序问题

这个主要的原因是gcc编译的时候,各个文件依赖顺序的问题。

在gcc编译的时候,如果文件a依赖于文件b,那么编译的时候必须把a放前面,b放后面。

例如:在main.c中使用了pthread库相关函数,那么编译的时候必须是main.c在前,-lpthread在后。 gcc main.c -lpthread -o a.out 。

  • 随着人们对安全意识的提高,不少朋友对无线路由器的安全产生了疑问,各大QQ群与IT论坛中都有讨论无线路由器是否有辐射?等消费者困惑的问题,其中不乏专业人士给予了解答,下面爱站技术编辑就整理了下。

      随着人们对安全意识的提高,不少朋友对无线路由器的安全产生了疑问,各大QQ群与IT论坛中都有讨论无线路由器是否有辐射?等消费者困惑的问题,其中不乏专业人士给予了解答,下面爱站技术编辑就整理了下。

    无线路由器辐射权威检测部门

      无线路由器辐射权威检测部门

      无线路由器有辐射吗?

      首先我们来看下,消费者关心的问题一:无线路由器有辐射吗?首先小编可以肯定的是无线路由器是有辐射的。对于电脑产品来说绝大多数产品都有辐射,如我们常用的电脑、手机、微波炉、电子等电器都是有辐射的,几乎所有电子产品都可以说有辐射,只是辐射强度高于低,过低的辐射可以忽略不计而已。

      提起无线路由器,家里拥有多台电脑的居民都不会陌生,只要买回它,在家里一安装,全家的电脑都可以同时无线上网,并且越来越多手机也可使用此功能,像我们耳熟能像的wifi无线上网(wifi上网是什么意思)、平板电脑、笔记本等无线上网都涉及到无线网络。无线网络的覆盖范围也普遍在几十米以内有效,也就是说在家安装一台无线无线路由器,全家人都处于无线网络覆盖范围之内,不少家庭朋友发出了这样的疑问:“全家都有信号,辐射应该不小吧,对小孩或者孕妇的身体会有影响吗?”经过权威部门鉴定结果为:“无线路由器的辐射很小,比手机的辐射还要小不少”,也就是说辐射强度处于一个人体可以接受的范围之内,因此可以说无线路由器的辐射并不大,相对比较安全。路由器是什么? 路由器工作原因与应用知识

      无线路由器辐射大吗?

      通过权威安全检测部门检测数据结果显示:所检测的无线路由器产生的电磁辐射稳定在4mG(毫高斯)以内,偶尔出现的高值可能是干扰,在离开路由器50cm后辐射在2mG范围内。工作状态下,有电脑连接和断开的辐射略有增高,但没有统计学意义。相对于电磁灶、微波炉、手机等电磁辐射,无线路由器的电磁辐射还是相对少的。微波炉工作时辐射达到130——360mG,1.5米以外才能降到2mG。手机待机时电磁辐射只有2mG,但给别人打电话,手机拨出的瞬间,辐射达到50——100mG,三四秒后才能恢复正常。

    无线路由器辐射测试数据#p#分页标题#e#

      无线路由器辐射测试数据

      阅读完以上无线路由器辐射强度报告,相信很多朋友已经放下了心中的大石,我们平时使用无线路由器怎么也要距离1米以上,所以用户理解的“辐射”可以完全忽略,而且我们测试的还是802.11n的产品,主流的54M产品会更低。最后总结一句话,如果你能接受手机的“辐射”,那么WIFI产品对你的健康影响不足一提,可以安心使用。最后需要提醒大家的是目前市场上的一些无线蹭网卡辐射很大,超过了人体安全承受标准,目前上网也比较便宜,建议大家最好不要使用什么大功率蹭网卡去破解他人无线网络,安全第一!。更多精彩内容,尽在https://js.aizhan.com。

  • 相关推荐:

  • 无线路由器是否有辐射?
  • Windows10将优化对高DPI屏显
  • 微软今天对初版Win10(
  • 微软:作为科技公司,我
  • 高防服务器对seo优化有危
  • 高防服务器如何做加密更
  • 选择服务器托管对于创业
  • 游戏服务器租用商家提供
  • 对比云服务器与独立服务
  • 辨别香港云主机真假对性
  • 网站内容禁止违规转载,转载授权联系中国云计算网