how to fix linker error in eclipse on linux
-
@micha_eleric said in how to fix linker error in eclipse on linux:
i cant find any qmainwindow, mainwindow, anything close to mainwindow in /usr/lib/x86_64-linux-gnu/
Of course not. QMainWindow is part of widgets module as you can easilly see in the documentation: https://doc.qt.io/qt-5/qmainwindow.html (qmake: QT += widgets)
That means you should look for libQt5Widgets.so in /usr/lib/x86_64-linux-gnu.
And "surprisingly" it is there in your own list of libs: /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5@jsulm g++ -L/usr/lib/x86_64-linux-gnu -L/usr -L/ -L/usr/lib -L/usr/lib/x86_64-linux-gnu/qt5 -L/usr/lib/qt5 -o "GUI2" ./src/CGUI.o ./src/Main.o /usr/lib/x86_64-linux-gnu/libQtGui.so /usr/lib/x86_64-linux-gnu/libQt5Widgets.so
/usr/bin/ld: ./src/CGUI.o: in functionCGUI::CGUI(QWidget*)': /home/michaeleric/eclipse-workspace/GUI2/Debug/../src/CGUI.cpp:10: undefined reference to
vtable for CGUI'
/usr/bin/ld: /home/michaeleric/eclipse-workspace/GUI2/Debug/../src/CGUI.cpp:10: undefined reference tovtable for CGUI' /usr/bin/ld: ./src/CGUI.o: in function
CGUI::~CGUI()':
/home/michaeleric/eclipse-workspace/GUI2/Debug/../src/CGUI.cpp:15: undefined reference tovtable for CGUI' /usr/bin/ld: /home/michaeleric/eclipse-workspace/GUI2/Debug/../src/CGUI.cpp:15: undefined reference to
vtable for CGUI' -
@jsulm g++ -L/usr/lib/x86_64-linux-gnu -L/usr -L/ -L/usr/lib -L/usr/lib/x86_64-linux-gnu/qt5 -L/usr/lib/qt5 -o "GUI2" ./src/CGUI.o ./src/Main.o /usr/lib/x86_64-linux-gnu/libQtGui.so /usr/lib/x86_64-linux-gnu/libQt5Widgets.so
/usr/bin/ld: ./src/CGUI.o: in functionCGUI::CGUI(QWidget*)': /home/michaeleric/eclipse-workspace/GUI2/Debug/../src/CGUI.cpp:10: undefined reference to
vtable for CGUI'
/usr/bin/ld: /home/michaeleric/eclipse-workspace/GUI2/Debug/../src/CGUI.cpp:10: undefined reference tovtable for CGUI' /usr/bin/ld: ./src/CGUI.o: in function
CGUI::~CGUI()':
/home/michaeleric/eclipse-workspace/GUI2/Debug/../src/CGUI.cpp:15: undefined reference tovtable for CGUI' /usr/bin/ld: /home/michaeleric/eclipse-workspace/GUI2/Debug/../src/CGUI.cpp:15: undefined reference to
vtable for CGUI'@micha_eleric said in how to fix linker error in eclipse on linux:
/usr/bin/ld: ./src/CGUI.o: in function CGUI::CGUI(QWidget*)': /home/michaeleric/eclipse-workspace/GUI2/Debug/../src/CGUI.cpp:10: undefined reference tovtable for CGUI'
This is now another problem.
Classes which subclass QObject need moc tool (see https://doc.qt.io/qt-5/moc.html for more details). You can of course do that manually somehow.
But I would strongly recommend to use a proper build tool, either qmake or CMake. Both will call moc for your. -
@micha_eleric said in how to fix linker error in eclipse on linux:
/usr/bin/ld: ./src/CGUI.o: in function CGUI::CGUI(QWidget*)': /home/michaeleric/eclipse-workspace/GUI2/Debug/../src/CGUI.cpp:10: undefined reference tovtable for CGUI'
This is now another problem.
Classes which subclass QObject need moc tool (see https://doc.qt.io/qt-5/moc.html for more details). You can of course do that manually somehow.
But I would strongly recommend to use a proper build tool, either qmake or CMake. Both will call moc for your.@jsulm thank you
-
@micha_eleric said in how to fix linker error in eclipse on linux:
/usr/bin/ld: ./src/CGUI.o: in function CGUI::CGUI(QWidget*)': /home/michaeleric/eclipse-workspace/GUI2/Debug/../src/CGUI.cpp:10: undefined reference tovtable for CGUI'
This is now another problem.
Classes which subclass QObject need moc tool (see https://doc.qt.io/qt-5/moc.html for more details). You can of course do that manually somehow.
But I would strongly recommend to use a proper build tool, either qmake or CMake. Both will call moc for your.This is now another problem.
Classes which subclass QObject need moc tool (see https://doc.qt.io/qt-5/moc.html for more details). You can of course do that manually somehow.
But I would strongly recommend to use a proper build tool, either qmake or CMake. Both will call moc for your.and not part of the install
-
This is now another problem.
Classes which subclass QObject need moc tool (see https://doc.qt.io/qt-5/moc.html for more details). You can of course do that manually somehow.
But I would strongly recommend to use a proper build tool, either qmake or CMake. Both will call moc for your.and not part of the install
@micha_eleric said in how to fix linker error in eclipse on linux:
and not part of the install
Do you mean moc? If you properly installed Qt development packages then it should be there.
On my Ubuntu: /usr/bin/moc -
@micha_eleric said in how to fix linker error in eclipse on linux:
and not part of the install
Do you mean moc? If you properly installed Qt development packages then it should be there.
On my Ubuntu: /usr/bin/moc@jsulm using eclipse
-
using eclipse on linux
error, i am mostly sure is an eclipse issue, and not a programming issue.g++ -L/usr/include/qt4 -L/usr/include/qt4/QtSerialPort -L/usr/include/qt4/QtGui -o "GUI2" ./src/CGUI.o ./src/Main.o
/usr/bin/ld: ./src/CGUI.o: in functionCGUI::CGUI()': /home/michaeleric/eclipse-workspace/GUI2/Debug/../src/CGUI.cpp:10: undefined reference to
QMainWindow::QMainWindow(QWidget*, QFlagsQt::WindowType)'
/usr/bin/ld: /home/michaeleric/eclipse-workspace/GUI2/Debug/../src/CGUI.cpp:10: undefined reference tovtable for CGUI' /usr/bin/ld: /home/michaeleric/eclipse-workspace/GUI2/Debug/../src/CGUI.cpp:10: undefined reference to
vtable for CGUI'
/usr/bin/ld: ./src/CGUI.o: in functionCGUI::~CGUI()': /home/michaeleric/eclipse-workspace/GUI2/Debug/../src/CGUI.cpp:15: undefined reference to
vtable for CGUI'
/usr/bin/ld: /home/michaeleric/eclipse-workspace/GUI2/Debug/../src/CGUI.cpp:15: undefined reference tovtable for CGUI' /usr/bin/ld: /home/michaeleric/eclipse-workspace/GUI2/Debug/../src/CGUI.cpp:15: undefined reference to
QMainWindow::~QMainWindow()'
/usr/bin/ld: ./src/Main.o: in functionmain': /home/michaeleric/eclipse-workspace/GUI2/Debug/../src/Main.cpp:14: undefined reference to
QApplication::QApplication(int&, char**, int)'
/usr/bin/ld: /home/michaeleric/eclipse-workspace/GUI2/Debug/../src/Main.cpp:17: undefined reference toQApplication::exec()' /usr/bin/ld: /home/michaeleric/eclipse-workspace/GUI2/Debug/../src/Main.cpp:14: undefined reference to
QApplication::~QApplication()'
/usr/bin/ld: /home/michaeleric/eclipse-workspace/GUI2/Debug/../src/Main.cpp:14: undefined reference to `QApplication::~QApplication()'
collect2: error: ld returned 1 exit status
make: *** [makefile:47: GUI2] Error 1based on https://forum.qt.io/topic/101400/qt-with-eclipse-c/5 , i added QtCore and QtWidgets, even though there were no errors with #include<>. same errors from compile.
https://stackoverflow.com/questions/6478317/eclipse-undefined-reference says it is a linker error
under Properties->C/C++ Build->Settings->Tool Settings->GCC C++ Linker->command: g++
under Properties->C/C++ Build->Settings->Tool Settings->GCC C++ Linker->Libraries->Libraries (-l) [nothing]
under Properties->C/C++ Build->Settings->Tool Settings->GCC C++ Linker->Libraries->Libraries search path (-L) /usr/include/qt4 /usr/include/qt4/QtWidgets /usr/include/qt4/QtCore /usr/include/qt4/QtSerialPort /usr/include/qt4/QtGui
under Properties->C/C++ Build->Settings->Tool Settings->GCC C++ Linker->Miscellaneous->Linker flags [nothing]
under Properties->C/C++ Build->Settings->Tool Settings->GCC C++ Linker->Miscellaneous->Other options (-Xlinker [option]) [nothing]
under Properties->C/C++ Build->Settings->Tool Settings->GCC C++ Linker->Miscellaneous->Other objects [nothing]
under Properties->C/C++ Build->Settings->Tool Settings->GCC C++ Linker->Shared Library Settings [nothing][nothing][nothing][nothing]
what is suppose to be added, and where?
if:
under Properties->C/C++ Build->Settings->Tool Settings->GCC C++ Linker->Libraries->Libraries (-l) /usr/include/qt4/QtGui
error:
/usr/bin/ld: cannot find -l/usr/include/qt4/QtGuiif:
under Properties->C/C++ Build->Settings->Tool Settings->GCC C++ Linker->Miscellaneous->Other options (-Xlinker [option]) /usr/include/qt4/QtGui
error:
/usr/bin/ld: cannot find /usr/include/qt4/QtGui: file format not recognizedif:
under Properties->C/C++ Build->Settings->Tool Settings->GCC C++ Linker->Miscellaneous->Other objects /usr/include/qt4/QtGui
error:
/usr/bin/ld: cannot find /usr/include/qt4/QtGui: file format not recognizedif it is a virtual function that has to be defined, then what would it be, other than constructor/destructor?
answer:
deleting:
under Properties->C/C++ Build->Settings->Tool Settings->GCC C++ Linker->Libraries->Libraries search path (-L) /usr/include/qt4 /usr/include/qt4/QtWidgets /usr/include/qt4/QtCore /usr/include/qt4/QtSerialPort /usr/include/qt4/QtGui, did nothing, no new errors, nothing with previous errorsunder Properties->C/C++ Build->Settings->Tool Settings->GCC C++ Linker->Miscellaneous->Other objects /usr/lib/x86_64-linux-gnu/libQtGui.so
fixed errors, exposed new errors@micha_eleric said in how to fix linker error in eclipse on linux:
using eclipse on linux
error, i am mostly sure is an eclipse issue, and not a programming issue. -
@JonB for me, find /usr/lib -name'*Qt5 *', anr find /usr/lib -name *Qt5 * had same results. [note] no space between 5 and *
@micha_eleric said in how to fix linker error in eclipse on linux:
@JonB for me, find /usr/lib -name'*Qt5 *', anr find /usr/lib -name *Qt5 * had same results. [note] no space between 5 and *
Not if you did as I carefully stated and had any file with
Qt5
in its name in the directory where you were when you typed in thatfind
command, as I explained.....
@JonB said in how to fix linker error in eclipse on linux:P.S.
If anyone does not believe me: before running the command do atouch Qt5
in the directory you runfind /usr/lib -name '*Qt5*'
versusfind /usr/lib -name *Qt5*
from., and compare the results...Did you do that
touch
or not? -
@micha_eleric said in how to fix linker error in eclipse on linux:
@JonB for me, find /usr/lib -name'*Qt5 *', anr find /usr/lib -name *Qt5 * had same results. [note] no space between 5 and *
Not if you did as I carefully stated and had any file with
Qt5
in its name in the directory where you were when you typed in thatfind
command, as I explained.....
@JonB said in how to fix linker error in eclipse on linux:P.S.
If anyone does not believe me: before running the command do atouch Qt5
in the directory you runfind /usr/lib -name '*Qt5*'
versusfind /usr/lib -name *Qt5*
from., and compare the results...Did you do that
touch
or not?@JonB touch did something different, but not touch *Qt5 *, and touch '*Qt5 *'
-
@JonB touch did something different, but not touch *Qt5 *, and touch '*Qt5 *'
@micha_eleric said in how to fix linker error in eclipse on linux:
but not touch *Qt5 *, and touch '*Qt5 *'
Of course not, if you understand wildcards you would know that could not work, and never what I said.
I could not have been clearer, I said
touch Qt5
would change the behaviour offind ... -name *Qt5*
, but not offind ... -name '*Qt5*'
. Hence all i was saying is thatfind
with a wildcard should always put the wildcard part inside quotes.