“未定义的引用`QString :: fromAscii_helper(char const *,int)'”

时间:2013-09-13 23:19:41

标签: c++ qt

我是Qt和C ++的新手,我想创建一个简单的项目。我写了这段代码:

#include <QString>

int main()
{
  QString str = "a,,b,c";

  return 0;
}

我按照这样编译:

g++ -o LeapMouse Leapmouse.cpp -I /home/dougui/Qt/5.1.1/gcc_64/include/QtCore -I /home/dougui/Qt/5.1.1/gcc_64/include -fPIE

我有这个错误:

/tmp/cc6umRmY.o: In function `QString::QString(char const*)':
Leapmouse.cpp:(.text._ZN7QStringC2EPKc[_ZN7QStringC5EPKc]+0x34): undefined reference to `QString::fromAscii_helper(char const*, int)'
/tmp/cc6umRmY.o: In function `QTypedArrayData<unsigned short>::deallocate(QArrayData*)':
Leapmouse.cpp:    (.text._ZN15QTypedArrayDataItE10deallocateEP10QArrayData[_ZN15QTypedArrayDataItE10deallocateEP10QArrayData]+0x1e): undefined reference to `QArrayData::deallocate(QArrayData*, unsigned long, unsigned long)'
collect2: error: ld returned 1 exit status

当我执行grep -ri 'fromAscii_helper' /home/dougui/Qt/5.1.1/gcc_64/include时,功能结束,如您所见:

/home/dougui/Qt/5.1.1/gcc_64/include/QtCore/qstring.h:    static Data *fromAscii_helper(const char *str, int size = -1);

应该包括在内。我错过了什么吗?是否可以将Qt的库包含在标准C ++项目中?

1 个答案:

答案 0 :(得分:3)

在C ++中仅包含相关标题是不够的:在链接可执行文件时,还需要指定相关库以及可能在哪里找到库的目录。我不知道Qt,但基于你上面的编译器调用,我猜你需要添加像

这样的选项
-L/home/dougui/Qt/5.1.1/gcc_64/lib -lQtCore

第一个选项指定可以找到库的位置,假设编译器默认情况下不会查找此目录,第二个选项是定义符号的库的名称。如何真正调用库我不知道:如果文件是libQtCore.alibQtCore.so,则选项-lQtCore会添加此库以供链接器搜索。但是,您可能需要将QtCore替换为其他名称。