错误:没有为架构x86_64找到符号,collect2:ld返回1退出状态 [英] Error: symbol(s) not found for architecture x86_64, collect2: ld returned 1 exit status

查看:202
本文介绍了错误:没有为架构x86_64找到符号,collect2:ld返回1退出状态的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在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& amp; amp; amp; ,int j);

public slots:
void changeIcon();
};

#endif // HEXBUTTON_H

Hexbutton.cpp:

  #includehexbutton.h

HexButton :: HexButton(QWidget * parent,QIcon& 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& lt; QPushButton>
#include< QLCDNumber>
#include< QSlider>
#include< QProgressBar>
#includehexbutton.h



类MyWindow:public QWidget
{

public:
MyWindow();
〜MyWindow();

私人:
HexButton * myButtons [11] [11];
};



#endif // MYWINDOW_H

MyWindow.cpp:

  #includeMyWindow.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> 
#includeMyWindow.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


b $ b

我得到两个错误:



1)没有为架构x86_64找到符号



2)collect2:ld退回1退出状态



它还说了121次(11 * 11):


$ b b

Object :: connect:没有这样的槽QPushButton :: changeIcon()in ../ Test / MyWindow.cpp:19



说:

  18:22:15:为项目运行构建步骤Test ... 
18:22:15 :配置不变,跳过qmake步骤。
18:22:15:Starting:/ usr / bin / make-w
make:输入目录`/ 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 /版本/ 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
架构x86_64的未定义符号:
vtable for HexButton,引用:
HexButton :: hexbutton.o
中的HexButton(QWidget *,QIcon& amp; int,int)in hexbutton.o
注意:缺少vtable通常意味着第一个非内联虚函数成员函数没有定义。
ld:未找到用于架构x86_64的符号
collect2:ld返回1退出状态
make:*** [Test.app/Contents/MacOS/Test]错误1
make:离开目录`/ Users / jonathanbibas / Documents / Workspace Qt / Test-build-desktop-Desktop_Qt_4_8_0_for_GCC__Qt_SDK__Debug'
18:22:20:进程/ usr / bin / make退出代码2。
构建项目时出错测试(目标:桌面)
执行生成步骤'Make'


$ b b

显然,错误来自Q_OBJECT(需要为插槽定义),但有一些问题,我的代码,而不是与我的编译器(因为我有,当槽在MainWindow,它工作正常)。



感谢您的帮助!

解决方案

面对同样的问题


  1. 我的信号未定义的引用错误。

  2. 将Q_OBJECT宏... vtable错误。

我这样做了并为我工作




  • 添加了Q_OBJECT

  • 清除项目

  • Ran qmake

  • 重建



    • 它编译得很好。


      I have been struggling for a while with an issue on Qt.

      Here is my code:

      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
      

      Hexbutton.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;
      
      }
      

      And finally, Main.cpp:

      #include <QApplication>
      #include "MyWindow.h"
      
      
      int main(int argc, char *argv[])
      {
          QApplication app(argc, argv);
      
              MyWindow fenetre;
              fenetre.show();
      
              return app.exec();
      }
      

      Just in case, here is the Test.pro

      SOURCES += \
          Main.cpp \
          MyWindow.cpp \
          hexbutton.cpp
      
      HEADERS += \
          MyWindow.h \
          hexbutton.h
      

      And I get the 2 errors:

      1) symbol(s) not found for architecture x86_64

      2) collect2: ld returned 1 exit status

      It also says 121 times (11*11):

      Object::connect: No such slot QPushButton::changeIcon() in ../Test/MyWindow.cpp:19

      and on the compile output it says:

      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'
      

      Apparently the error comes from the Q_OBJECT (needed for the slots definition), but there is something wrong with my code, not with my compiler (because I have when slots are in MainWindow, it works fine).

      Thank you for your help!

      解决方案

      Faced same problem

      1. undefined refrence error for my signal.
      2. After putting Q_OBJECT macro... vtable errors.

      I did this and worked for me

      • Added Q_OBJECT to file
      • Cleaned project
      • Ran qmake
      • Rebuild

      it compiles fine.

      这篇关于错误:没有为架构x86_64找到符号,collect2:ld返回1退出状态的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆