免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3545 | 回复: 8
打印 上一主题 下一主题

为何是undefined reference? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-06-10 15:24 |只看该作者 |倒序浏览
小弟以前从来都是vc下编程,不太习惯linux下的环境。我在redhat下有这样一段代码:


#include <cmath>

#define BIT_NUM 6


int dist1(int a , int b)
{
        int c;
        c = a^b;
        int i , k;
        k = 0;
        for( i = BIT_NUM-1 ; i >= 0 ; i--)
        {
                int        p = (int)pow(2.0 , i);
                if(c / p == 1)k++;
                c = c % p;
        }
        return k;
}

int main()
{
        int a , b ;
        int d;
        a = 16;
        b = 32;
        d = dist1( a ,b );
        return 1;
}

我用了math库中的pow函数,include了cmath,但是make的时候系统却提示:"pow" undefined reference , 我看了gcc文件夹中的cmath文件,里面明确定义了pow函数。然后我把include去掉,报错就不一样了,是没有声明和定义的变量。看来最初编译器是发现了pow函数的,但为什么会说是没有定义的引用呢?为什么会这样呢?我编译别人的源代码时也包含了cmath库,就能顺利通过,为什么我这样一个小小的函数都不行呢?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2006-06-10 15:40 |只看该作者
加上-lm。

论坛徽章:
0
3 [报告]
发表于 2006-06-10 18:07 |只看该作者
using namespace std;

论坛徽章:
0
4 [报告]
发表于 2006-06-10 19:07 |只看该作者
还是不好使啊,而且错误很怪,第一次编译过去了,但链接时出现了毛病,一大堆的错误,一点也看不懂,有什么start什么什么重定义,夸张得很。后来我把o文件删除了,重新make,这次连编译都过不去了。又出现了undefined reference错误,但不是pow,而是一个又让人看不懂的函数:__gxx_personality_v0,这究竟是咋回事啊,崩溃了……

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
5 [报告]
发表于 2006-06-10 19:20 |只看该作者
你为什么使用<cmath>而不用<math.h>头文件?
你的是c++程序吗?
用g++编译。
建议先找一些gcc或g++如何的文章来看。

论坛徽章:
0
6 [报告]
发表于 2006-06-10 22:24 |只看该作者
呵呵,linux源代码的文档注解中说math.h是c的,而cmath就是专门为了c++开发的。g++和gcc本质一样的,本质上还是gcc,我们实验室所有的c++程序都是用gcc编译的,一般的程序用gcc足够了。我也写过make过一些大的程序,文章也看过一些,但无论是程序还是文章都没发现有过这样的错误。刚才指点我的大虾能在自己机器上把我上面的简单代码make通过,亲自试一下吗?小弟将感激不尽!:)

[ 本帖最后由 wangyanfeng05 于 2006-6-10 22:27 编辑 ]

论坛徽章:
0
7 [报告]
发表于 2006-06-10 23:35 |只看该作者
搂主是用的什么系统?windows?
以上程序在vc 6。0 和linux gcc 稍微改动上都能编译出来了。
你把编译过程以及出错报告贴上来看看

[ 本帖最后由 nnnqpnnn 于 2006-6-10 23:38 编辑 ]

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
8 [报告]
发表于 2006-06-10 23:45 |只看该作者
原帖由 wangyanfeng05 于 2006-6-10 22:24 发表
呵呵,linux源代码的文档注解中说math.h是c的,而cmath就是专门为了c++开发的。g++和gcc本质一样的,本质上还是gcc,我们实验室所有的c++程序都是用gcc编译的,一般的程序用gcc足够了。我也写过make过一些大的程序 ...

你没有环境吗?

论坛徽章:
0
9 [报告]
发表于 2006-06-11 09:27 |只看该作者
>> g++和gcc本质一样的,本质上还是gcc,我们实验室所有的c++程序都是用gcc编译的,一般的程序用gcc足够了。

对于 C++ 程序,编译的时候用 gcc 或者 g++ 都可以。但是在进行连接的时候最好用 g++,因为用 g++ 会自动进行 C++ 标准库的连接;用 gcc 连接 C++ 程序也可以,但是需要人为指定连接 C++ 标准库,否则就会出现 undefined reference to `__gxx_personality_v\0' 之类的错误。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP