LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1190|回复: 3

[已解决]一个使用QHash的问题,总是出现"undefined reference..."

[复制链接]
发表于 2009-3-11 08:55:14 | 显示全部楼层 |阅读模式
qt新手,这几天需要用QHash做些东西,结果刚开始就碰个小问题:QHash在程序里总是编译不过,总会提示"QHashData"的"Undefined reference"问题。为了测试问题所在,写了一个非常简单的程序如下:

#include <iostream>
#include <QtCore/QHash>
#include <QtCore/QHashData>

using namespace std;

int main(int argc, const char* argv[])
{
        QHash<int, char*>* hash = new QHash<int, char*>();
        (*hash)[0] = "aaa";
        (*hash)[1] = "bbb";
        cout << "The hash value for 0 is " << (*hash)[0];
        return 0;
}

同样,编译时出现问题:

Undefined symbols:
  "QHashData::freeNode(void*)", referenced from:
      QHash<int, char*>::deleteNode(QHashNode<int, char*>*)in main.o
  "QHashData::destroyAndFree()", referenced from:
      QHash<int, char*>::freeData(QHashData*)in main.o
  "qt_assert(char const*, char const*, int)", referenced from:
      QHash<int, char*>::findNode(int const&, unsigned int*) constin main.o
  "QHashData::rehash(int)", referenced from:
      QHashData::willGrow()     in main.o
  "QHashData::detach_helper(void (*)(QHashData::Node*, void*), int)", referenced from:
      QHash<int, char*>::detach_helper()in main.o
  "QHashData::allocateNode()", referenced from:
      QHash<int, char*>::createNode(unsigned int, int const&, char* const&, QHashNode<int, char*>**)in main.o
  "QHashData::shared_null", referenced from:
      __ZN9QHashData11shared_nullE$non_lazy_ptr in main.o
ld: symbol(s) not found
collect2: ld returned 1 exit status

总觉得是缺了哪个库引用了,但是试过添加QHashData,没用。其实QHashData就是在qhash.h文件中定义的…各位有经验的高手指教一下,我估计是犯什么低级错误了…先谢过了!

[color="Red"]解决办法:还是自己没有好好看qt的手册阿…其实需要自己在项目所在目录下面运行qmake -project和qmake projectname.pro,然后qt会自动生成需要的Makefile。用这个Makefile就没问题了…
发表于 2009-3-11 11:31:44 | 显示全部楼层
请问你用什么编译命令呢?
或者把Makefile打开看一看相关的库的路径是什么,然后再看一看自己的系统的在什么路径。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-3-11 13:30:20 | 显示全部楼层
Post by liuhaixiao1980;1959137
请问你用什么编译命令呢?
或者把Makefile打开看一看相关的库的路径是什么,然后再看一看自己的系统的在什么路径。


我还不是很熟makefile…程序是在code::block里面写的,在build option里面的link选项里加入了/usr/include/qt4,这是我从机器里找到的qt4的路径。

我用同样的代码在mac的xcode里面也试了一下(抱歉还是不会用makefile),也是同样的问题,不过我把qt4在mac下面的framework拖到项目里就ok了…

如果直接使用g++ main.cpp,会出现同样的问题…正是因为不怎么懂makefile,所以写了个比较简单能够直接在命令行编译…咳咳,要好好学习C编程了…
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-3-12 07:06:56 | 显示全部楼层
Post by liuhaixiao1980;1959137
请问你用什么编译命令呢?
或者把Makefile打开看一看相关的库的路径是什么,然后再看一看自己的系统的在什么路径。


现学了一下makefile,写了下面内容:

qtlinktest : main.o
                 g++ -o qtlinktest main.o

main.o : main.cpp
                 g++ -I/usr/include/qt4 -c -v main.cpp

clean :
                -rm qtlinktest main.o
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表