Chinaunix

标题: 为何是undefined reference? [打印本页]

作者: wangyanfeng05    时间: 2006-06-10 15:24
标题: 为何是undefined reference?
小弟以前从来都是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库,就能顺利通过,为什么我这样一个小小的函数都不行呢?
作者: lenovo    时间: 2006-06-10 15:40
加上-lm。
作者: xiaonanln    时间: 2006-06-10 18:07
using namespace std;
作者: wangyanfeng05    时间: 2006-06-10 19:07
还是不好使啊,而且错误很怪,第一次编译过去了,但链接时出现了毛病,一大堆的错误,一点也看不懂,有什么start什么什么重定义,夸张得很。后来我把o文件删除了,重新make,这次连编译都过不去了。又出现了undefined reference错误,但不是pow,而是一个又让人看不懂的函数:__gxx_personality_v0,这究竟是咋回事啊,崩溃了……
作者: lenovo    时间: 2006-06-10 19:20
你为什么使用<cmath>而不用<math.h>头文件?
你的是c++程序吗?
用g++编译。
建议先找一些gcc或g++如何的文章来看。
作者: wangyanfeng05    时间: 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 编辑 ]
作者: nnnqpnnn    时间: 2006-06-10 23:35
搂主是用的什么系统?windows?
以上程序在vc 6。0 和linux gcc 稍微改动上都能编译出来了。
你把编译过程以及出错报告贴上来看看

[ 本帖最后由 nnnqpnnn 于 2006-6-10 23:38 编辑 ]
作者: lenovo    时间: 2006-06-10 23:45
原帖由 wangyanfeng05 于 2006-6-10 22:24 发表
呵呵,linux源代码的文档注解中说math.h是c的,而cmath就是专门为了c++开发的。g++和gcc本质一样的,本质上还是gcc,我们实验室所有的c++程序都是用gcc编译的,一般的程序用gcc足够了。我也写过make过一些大的程序 ...

你没有环境吗?
作者: whyglinux    时间: 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' 之类的错误。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2