Compiling Qt cpp code and receiving this error:
Running ld for x86_64 ...
Undefined symbols for architecture x86_64:
"vtable for HelixButton", referenced from:
HelixButton::HelixButton(QString const&, QWidget*) in helixQtCmd.o
HelixButton::HelixButton(QString const&, QWidget*) in helixQtCmd.o
NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
my .h file looks like:
class HelixButton : public QPushButton
{
Q_OBJECT
public:
HelixButton(const QString& text, QWidget* parent = 0);
virtual ~HelixButton();
};
and the corresponding cpp:
HelixButton::HelixButton(const QString& text, QWidget* parent)
: QPushButton(text, parent)
{}
HelixButton::~HelixButton()
{}
The pro file contains the proper header:
include(qtconfig)
INCLUDEPATH += /Users/laurent/Dropbox/Dev/Maya/qt/include
INCLUDEPATH += /Users/laurent/Dropbox/Dev/Maya/qt/include/QtGui
INCLUDEPATH += /Users/laurent/Dropbox/Dev/Maya/qt/include/QtCore
INCLUDEPATH += /Users/laurent/Dropbox/Dev/Maya/qt/include/QtUiTools
TARGET = helixQtCmd
HEADERS += helixQtCmd.h
SOURCES += helixQtCmd.cpp
Contents of the qtconfig file:
TEMPLATE = lib
CONFIG -= debug
CONFIG += qt warn_on plugin
_DEVKIT_LOCATION = $$(MAYA_LOCATION)/../../devkit
_MAYA_INCLUDE_DIR = $${_DEVKIT_LOCATION}/include
DEFINES += CC_GNU_ OSMac_ OSMacOSX_ Bits32_ REQUIRE_IOSTREAM \
OSMac_MachO_ _LANGUAGE_C_PLUS_PLUS
INCLUDEPATH += .. "$${_MAYA_INCLUDE_DIR}"
TARGET_EXT = bundle
QMAKE_EXTENSION_SHLIB = bundle
QMAKE_CC = clang
QMAKE_CXX = clang++
_CFLAGS = -O3 -include "$${_MAYA_INCLUDE_DIR}/maya/OpenMayaMac.h"
QMAKE_CFLAGS += $${_CFLAGS}
QMAKE_CXXFLAGS += $${_CFLAGS} -stdlib=libstdc++ $(WARNFLAGS) $(ERROR_FLAGS) \
-fno-gnu-keywords -fpascal-strings
_DYNLIB_LOCATION = $$(MAYA_LOCATION)/MacOS
_LREMAP = -Wl,-executable_path,"$${_DYNLIB_LOCATION}"
LIBS += -L"$${_DYNLIB_LOCATION}" $${_LREMAP} -lOpenMaya -lFoundation \
-framework System -framework CoreServices \
-framework SystemConfiguration \
-framework Carbon -framework Cocoa \
-framework ApplicationServices \
-framework IOKit \
-framework QtCore \
-framework QtGui
QMAKE_LFLAGS += -stdlib=libstdc++ -fno-gnu-keywords -fpascal-strings \
-isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk -bundle
QMAKE_LINK = $${QMAKE_CXX}
QMAKE_MAC_SDK = /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk
MAKEFILE = $${TARGET}.mak
Reading multiple articles on internet show an issue with the destructor declaration, but it seems correct.
Removing Q_OBJECT makes it work, but i really need signals.
No moc file is generated upon compilation.
Any clue what could go wrong ?
Thanks