[SOLVED] Issue when using class created with my Dll
-
Hello,
I created a C++ Dll Obo which compiles fine.- #include "obo_global.h"
- class OBOSHARED_EXPORT Obo
{
public:
Obo();
std::vector<EI*> generate();
};
where EI is a class defined in another part of code.
Now I want to test this Obo library in a separate code OboTester but don't know why but I can't use this EI class as I have a unresolved external symbol, even whith the "EI.h" included in OboTester.
Here is the code :- int main(int argc, char argv[])
{
QCoreApplication a(argc, argv);
Obo myObo;
std::vector<EI> res = myObo.generate();
// until here it works fine
EI myEI; // crashes at compile time
return a.exec();
}
What did I do wrong here?
Thanks -
Hi,
I don't know if is a type but in header file
generate
returns astd::vector<El*>
and inmain
you assign it to astd::vector<El>
.BTW, before access to element [0] you should check the vector is not empty.
Can you post the compile/link error?
-
Hi,
Sorry I edited with something more concrete, its not a problem of empty vector, it doesn't compile when I want to instantiate the class EI.
The error :
main.obj:-1: erreur : LNK2019: unresolved external symbol "public: __cdecl EI::EI(void)" (??0EI@@QEAA@XZ) referenced in function main -
How is defined
El
??Seems El doesn't have a default constructor
-
@mcosta
Well, its defined in the Obo project library as a standard class.
It has a default constructor :
EI::EI()
{}
-
Can you post the code and the qmake project file??
-
Well, which code? Obo is around 40k lines of code :/
Which qMake file? The one from the library?Can this be related to EXporting DLL classes? I am not familiar with that at all :(
-
@BlackMamba said:
OBOSHARED_EXPORT
Do you used this also for El?
The library .pro file should be enough.Seems the the El constructor in not available outside the library.
-
I didn't use this for the EI class, let me try that !
-
Now it compiles but crashes immediately when I execute the code.
Here is the pro file :- include(Obo.pri)
QT -= gui
TARGET = Obo
TEMPLATE = lib
DEFINES += Obo_LIBRARY
SOURCES += Obo.cpp
HEADERS += Obo.h
Obo_global.h
unix {
target.path = /usr/lib
INSTALLS += target
}
and the .pri file :
- SOURCES +=
...
$$PWD/src/OboInterface/EI.cpp
HEADERS +=
$$PWD/src/OboInterface/EI.h
...
DEPENDPATH += $$PWD/src/OboInterface
INCLUDEPATH+= $$PWD/src/OboInterface
- include(Obo.pri)
-
Ok,
where's the crash? which line? Are you able to collect a crash dump?
-
It crashes at the same line, when I try to instantiate the object :
EI myEI; -
How is defined El??
Try to provide as much information as possible; otherwise we'll be not able to help you
-
With an empty class, I have the same issue :
- #ifndef EI_H
#define EI_H
class EI
{
public:
EI();
~EI();
};#endif // EI_H
main.obj:-1: erreur : LNK2019: unresolved external symbol "public: __cdecl EI::EI(void)" (??0EI@@QEAA@XZ) referenced in function main
With this :
#ifndef EI_H
#define EI_H#include "obo_global.h"
class OBOSHARED_EXPORT EI
{
public:
EI();
~EI();
};#endif // EI_H
same error :(
- #ifndef EI_H
-
I mean the implementation of El.
Can you post the crash dump?
-
After some clean, good news, I have a new mistake when I add OB0SHARED_EXPORT for the EI class:
main.obj:-1: erreur : LNK2019: unresolved external symbol "__declspec(dllimport) public: __cdecl EI::EI(void)" (_imp??0EI@@QEAA@XZ) referenced in function main -
@mcosta I gave youi the implementation, I deleted all the methods, its an empty class with ctor and dtor only.
-
Sorry, if you don't show the code I can't help you!
-
@mcosta Please read my last answer ;)
-
So, now you have the link error or still the crash??
You said before you was able to compile and link but you get a crash and now again the link error. It's a little bit confusing