Solved error LNK2001: unresolved external symbol "public: static struct QMetaObject .. from lib template
-
@SGaist said in error LNK2001: unresolved external symbol "public: static struct QMetaObject .. from lib template:
silly
Sadly it's not the problem ...
-
@OPit And both have the same architecture, i.e. 32 vs. 64 bit?
-
This:
@OPit said in error LNK2001: unresolved external symbol "public: static struct QMetaObject .. from lib template:
?metaObject@VideoPreviewWidget@QtAV@@UEBAPEBUQMetaObject@@XZ
Is very different from this:
?staticMetaObject@VideoPreviewWidget@QtAV@@2UQMetaObject@@B
The former is a method, the latter is a (global) variable. Please try again. Could you also provide the content of the
moc
file in question (the one that fixes the issue if linked with)? -
@aha_1980 yes, the same architecture
@kshegunov this is a link to download the file (I can't upload from the forum) :
https://we.tl/t-bhEPIToZV2Thanks.
-
Hi, perhaps it's a namespace problem, you could try changing to a using statement in your InputStreamPreview.h:
#include <QtAVWidgets/VideoPreviewWidget.h> using namespace QtAV; class InputStreamPreview : public VideoPreviewWidget { Q_OBJECT ...
-
@OPit said in error LNK2001: unresolved external symbol "public: static struct QMetaObject .. from lib template:
this is a link to download the file (I can't upload from the forum)
I'm sorry I wasn't clear. I meant the generated
moc_XXX.cpp
file. I have no tools to inspect the object file even if I wanted to because I work exclusively on Linux.@hskoglund said in error LNK2001: unresolved external symbol "public: static struct QMetaObject .. from lib template:
Hi, perhaps it's a namespace problem, you could try changing to a using statement in your InputStreamPreview.h
A decent idea, but I don't think that's it.
moc
, while not too smart, does recognize namespaces and generates code accordingly. I do use them and everything links fine. -
@kshegunov oh sorry, this is the cpp file.
-
Hi, do you have a moc_VideoPreviewWidget.cpp that's compiled using Qt 5.12? (The one in the link is built with Qt 5.9.1)
-
@hskoglund yes of course : https://we.tl/t-Uhhsre7Vzm
the problem is the same with version 5.9.1 or 5.12 (and also VS2017 or VS2015)
-
Hi, if you look in the .pro files above for your application and myStream.lib, both .pro files have a inputstreampreview.cpp and a inputstreampreview.h included. They are not located in the same directory (one pair is in ../../src/ and the other pair is in ../../src/view/) but if they have the same contents then maybe the linker gets confused when you build your app (together with your myStream.lib).
If they do not have the same contents (i.e. just a stroke of bad luck with the naming of your files) then rename one of the pairs. Otherwise, you could try building your app again but with only of the pairs, for example commenting out ../../src/view/inputstreampreview.cpp from the SOURCES section in your Application.pro file.
-
@hskoglund said in error LNK2001: unresolved external symbol "public: static struct QMetaObject .. from lib template:
inputstreampreview.cpp
thanks for your answer, but I don't understand well what you want to say.
inputstreampreview.cpp/.h are only included in myStream.lib (in src folder).
For my main app, I just include the .h with INCLUDEPATH keyword and link myStream lib with LIBS+= -lmyStream
I don't know why and where you can see ../../src/view/ path ?? -
-
@hskoglund oups it's a mistake, a drag and drop in my exemple app.pro. But even if I remove this entry, I have the same problem.
-
Even if you run qmake and rebuild AppTest.exe i.e. Application.pro?
-
I'm pretty sure at this point that for whatever reason your static library didn't include the symbol in question. One way or another you need to find why that happened. It may be a bug with the library, or some misconfiguration.
-
Well, I rebuilt QtAV with a new installation of Qt, and it works ....
So, even if I didn't understand the mistake, thanks a lot for your help !