错误:找不到体系结构x86_64的符号,collect2:ld返回1退出状态
Error: symbol(s) not found for architecture x86_64, collect2: ld returned 1 exit status
我已经为Qt上的一个问题挣扎了一段时间。
这是我的代码:
hexbutton.h:
#ifndef HEXBUTTON_H
#define HEXBUTTON_H
#include <QPushButton>
#include <QWidget>
#include <QIcon>
class HexButton : public QPushButton
{
Q_OBJECT
public:
HexButton(QWidget *parent, QIcon &icon, int i, int j);
public slots:
void changeIcon();
};
#endif // HEXBUTTON_H
Hextutton.cpp:
#include "hexbutton.h"
HexButton::HexButton(QWidget *parent, QIcon &icon, int i , int j) : QPushButton(parent){
//setFlat(true);
setIcon(icon);
setGeometry((i*40)+((j*40)/2), j*40, 40, 40);
}
void HexButton::changeIcon(){
setIcon(QIcon("/Users/jonathanbibas/Documents/Workspace Qt/Test/hexagon.gif"));
}
MyWindow.h:
#ifndef MYWINDOW_H
#define MYWINDOW_H
#include <QApplication>
#include <QWidget>
#include <QPushButton>
#include <QLCDNumber>
#include <QSlider>
#include <QProgressBar>
#include "hexbutton.h"
class MyWindow : public QWidget
{
public:
MyWindow();
~MyWindow();
private:
HexButton * myButtons[11][11];
};
#endif // MYWINDOW_H
MyWindow.cpp:
#include "MyWindow.h"
#include <QColor>
#include <QIcon>
MyWindow::MyWindow() : QWidget() {
setFixedSize(740, 440);
QIcon icon = QIcon("/Users/jonathanbibas/Documents/Workspace Qt/Test/whitehexagon.png");
for(int i =0 ; i < 11 ; i ++){
for(int j =0 ; j < 11 ; j ++){
myButtons[i][j] = new HexButton(this, icon, i, j);
QObject::connect(myButtons[i][j], SIGNAL(clicked()), myButtons[i][j], SLOT(changeIcon()));
}
}
}
MyWindow::~MyWindow()
{
delete myButtons;
}
最后,Main.cpp:
#include <QApplication>
#include "MyWindow.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MyWindow fenetre;
fenetre.show();
return app.exec();
}
以防万一,这里是Test.pro
SOURCES +=
Main.cpp
MyWindow.cpp
hexbutton.cpp
HEADERS +=
MyWindow.h
hexbutton.h
我得到了两个错误:
1) 找不到体系结构x86_64 的符号
2) collect2:ld返回1退出状态
它还说121次(11*11):
对象::connect:中没有这样的插槽QPushButton::changeIcon()/Test/MyWindow.cpp:19
在编译输出上显示:
18:22:15: Running build steps for project Test...
18:22:15: Configuration unchanged, skipping qmake step.
18:22:15: Starting: "/usr/bin/make" -w
make: Entering directory `/Users/jonathanbibas/Documents/Workspace Qt/Test-build-desktop-Desktop_Qt_4_8_0_for_GCC__Qt_SDK__Debug'
g++ -c -pipe -g -gdwarf-2 -arch x86_64 -Xarch_x86_64 -mmacosx-version-min=10.5 -Wall -W -DQT_GUI_LIB -DQT_CORE_LIB -I../../../QtSDK/Desktop/Qt/4.8.0/gcc/mkspecs/macx-g++ -I../Test -I../../../QtSDK/Desktop/Qt/4.8.0/gcc/lib/QtCore.framework/Versions/4/Headers -I../../../QtSDK/Desktop/Qt/4.8.0/gcc/include/QtCore -I../../../QtSDK/Desktop/Qt/4.8.0/gcc/lib/QtGui.framework/Versions/4/Headers -I../../../QtSDK/Desktop/Qt/4.8.0/gcc/include/QtGui -I../../../QtSDK/Desktop/Qt/4.8.0/gcc/include -I. -I../Test -I. -F/Users/jonathanbibas/QtSDK/Desktop/Qt/4.8.0/gcc/lib -o hexbutton.o ../Test/hexbutton.cpp
g++ -headerpad_max_install_names -arch x86_64 -Xarch_x86_64 -mmacosx-version-min=10.5 -o Test.app/Contents/MacOS/Test Main.o MyWindow.o hexbutton.o moc_MyWindow.o -F/Users/jonathanbibas/QtSDK/Desktop/Qt/4.8.0/gcc/lib -L/Users/jonathanbibas/QtSDK/Desktop/Qt/4.8.0/gcc/lib -framework QtGui -framework QtCore
Undefined symbols for architecture x86_64:
"vtable for HexButton", referenced from:
HexButton::HexButton(QWidget*, QIcon&, int, int)in hexbutton.o
HexButton::HexButton(QWidget*, QIcon&, int, int)in hexbutton.o
NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
make: *** [Test.app/Contents/MacOS/Test] Error 1
make: Leaving directory `/Users/jonathanbibas/Documents/Workspace Qt/Test-build-desktop-Desktop_Qt_4_8_0_for_GCC__Qt_SDK__Debug'
18:22:20: The process "/usr/bin/make" exited with code 2.
Error while building project Test (target: Desktop)
When executing build step 'Make'
显然,错误来自Q_OBJECT(插槽定义所需),但我的代码有问题,而不是我的编译器(因为当插槽在MainWindow中时,我有,它工作正常)。
谢谢你的帮助!
面临相同的问题
- 我的信号存在未定义的参考错误
- 放入Q_OBJECT宏后。。。vtable错误
我做了这件事并为我工作
- 将Q_OBJECT添加到文件
- 已清理项目
- 运行qmake
- 重建
它编译得很好。
得到了相同的错误。我在.h文件中声明了一个私有插槽,但在cpp文件中没有定义它。我在这两个地方都删除了我未使用的插槽,并编译了它。
在将Qt代码从一个平台合并到另一个平台时,我遇到了这种情况。经过多次尝试和错误,我刚刚解决了这个问题,所以我把它发布在这里,因为我的问题不同。如果你正在合并新文件,你不能只合并文件和.Pro文件,并期望它们会出现在Qt Creator中进行编译。请注意,您的新文件实际上并没有显示在文件夹下的IDE中。我忽略了这一点,只是在查看文件夹结构和.Pro文件。一旦我手动添加了Qt中的所有文件,它就编译得很好。以下是我的想法:
- 右键单击模糊的"找不到体系结构x86_64的符号"错误,然后选择"编译输出"
- 在底部,它将显示找不到的方法。右键单击IDE中的文件夹,然后选择"添加现有文件",可以找到这些方法所在的文件,并添加这些头文件和类文件
- 生成,或先清理后生成
CONFIG -= x86_64
为我修复了这个问题
当您在定义函数时忘记了类运算符时,可能会发生这种情况。
H文件:
class Globals
{
public:
unsigned int myFunction();
};
CPP文件:
unsigned int Globals::myFunction(){return 3;}
我终于找到了答案!(对于任何感兴趣的人)
错误的是,我不应该扩展类QPushButton来自定义我的按钮,而是创建我自己的类HexButton来扩展/继承QWidget类!为此,我们必须向按钮添加一个QPushButton实例。好吧,然后它做:
class HexButton : public QWidget
{
Q_OBJECT
public:
HexButton(QWidget *parent = 0);
public slots:
void changeIcon();
private:
QPushButton *button;
};
将slot changeIcon()从MyWindow类移动到HexButton类中。
由于您的构建系统,Qt通常会发生这种情况-这表明您没有编译/链接生成的代码moc
我很确定你的代码没有什么问题,所以错误一定是在qt-creator中的某个设置中,我真的帮不上忙,因为我很少使用它。
如果你还没有,你可以尝试在hextutton.pp中添加一个显式的空析构函数声明,并在hextbutton.cpp中添加定义。这应该没有必要,但我听说这会对一些古怪的编译器/链接器产生影响。
尝试删除pro.user文件,并使用任何qt 32位工具包重新导入项目。
- C++ 中的编译错误:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- 编译问题:在函数"_start"中:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- collect2:错误:ld 返回 1 个退出状态未定义的引用
- C++ collect2:错误:ld 返回 1 退出状态
- 找不到 -llibmysqld Collect2.exe:错误:ld 返回 1 退出状态
- 每次我要使用外部资源时,我都会得到:collect2。exe:错误 ld 返回 1 退出状态
- Cmake无法在qt-creater/collect2上编译简单的测试程序:错误:ld
- 对"displayForStudent(int, int const*, double const*, int)"的未定义引用 collect2.exe:错误:ld 返回 1 个退出状态
- mingw32/bin/ld.exe:找不到 -lfl collect2.exe:错误:ld 返回 1 个退出状态
- collect2:错误:ld 在制作带有代码块的 .so 文件(64 位版本)时返回 1 个退出状态
- 生成文件gtkmm;collect2.exe:错误:ld返回1退出状态
- Collect2:错误:LD在C 中返回1个退出状态
- 链接错误(collect2:ld返回1)
- collect2:Ld返回了1个退出状态生成make错误
- ..未定义对..的引用..collect2:ld返回1退出状态
- /tmp/ccQ0q0g5.o:(.eh_frame+0x11):对"__gxx_personality_v0"的未定义引用 collect2:ld 返回 1 个退出状态
- 链接器错误 |collect2:错误:ld 返回 1 个退出状态
- 编译时出现错误"collect2:ld 返回 1 个退出状态"
- collect2:错误:ld 返回 1 个退出状态图形
- Opencv,命令行 collect2 中缺少 DSO:错误:ld 返回 1 个退出状态