Using 3rd party dll with defined global variables
-
Hi,
I'm building an app which needs some 3rd party .dll files. I linked the appropriate .lib files in my .pro file, set INCLUDEPATH for the headers, placed .dlls to the build directory, but now I'm having troubles building my application. The problem seems to be that there are global variables used in the headers (extern type glvbalVar; someLocalVar = globalVr;
) which are defined in the .dll .c files and I'm getting Unresolved external symbol errors for these global variables. Now I'm not sure if the problem is that the application cannot find the .dlls (it should, if they are in the build dir, shouldn't it?) or it's the problem of these global variables which are not known during the building (I'm not really sure how it works). So please could someone help me about what are the possibilities here? -
If your app is c++
and the files truly are c files. ( not cpp)
you might need to do
extern "C" {
#include "whatever.h"
}
so the names are not mangled.
but its hard to say as im not sur what the lib/Dlls are.
or where the error comes.it could also just be it dont link the libs.
Jsut to be sure. You did compile the DLL with same compiler as for apps?
if you downloaded them as binary.
Are you using a compiler that is compatible with the one used to Create the libs/Dlls?
Like you cannot use a DLL from Visual Studio 2013 in Vs 2017 etc. -
The .dlls are 3rd party, I just downloaded them and have no idea what compiler made them, so it could be the problem. If it is so, do I even have some chance to compile it?
About the headers:
My app is cpp. The problem headers (which are 3rd party and so not made by myself) are for c files and there is this in the headers:ifdef __cplusplus extern "C" { endif extern const int A; #ifdef __cplusplus } // extern "C" static const int B = A; endif
And my .pro file. There are both the .lib and .dll in x64/lib. I copied the .dlls also to the build directory.
TEMPLATE = app TARGET = test_xsens INCLUDEPATH += . CONFIG += console DEFINES += QT_DEPRECATED_WARNINGS DEFINES += XSENS_RELEASE DEFINES += XSTYPES_STATIC_LIB LIBS += -L$$PWD/x64/lib/ -lxstypes64 LIBS += -L$$PWD/x64/lib/ -lxsensdeviceapi64 INCLUDEPATH += $$PWD/include INCLUDEPATH += $$PWD/include/xsens INCLUDEPATH += $$PWD/include/xcommunication HEADERS += ..... SOURCES += .....
-
Hi
Are you using visual studio compiler ? -
@mrjj
I downloaded it from the official web pages of the hardware the library is for. I checked everywhere and didn't find anything about supported compilers.But I just found that there are the problem causing .c files in the library so I compilled them and used the rest of the library from the .dlls. It seems to be working, but I'm facing some runtime heap problems with some methods from the library. I don't know if it is connected to these linking and library problem which this question is about. I need to examine it a little bit more.
-
@mrjj
I downloaded it from the official web pages of the hardware the library is for. I checked everywhere and didn't find anything about supported compilers.But I just found that there are the problem causing .c files in the library so I compilled them and used the rest of the library from the .dlls. It seems to be working, but I'm facing some runtime heap problems with some methods from the library. I don't know if it is connected to these linking and library problem which this question is about. I need to examine it a little bit more.
@sykac
Hi
It does sound like a c type library which can be used from
other compilers since no object/class types need be resolved.Im not sure if you mixing would cause heap issues but make sure not mixing
debug and release modes as that might fool it.Do you have all code for the DLLs ?
-
@mrjj
And what do you mean by mixing debug and release modes? (I'm using just the Debug mode in qtcreator) -
@jsulm
That was it. I built my app in release mode and now it works fine :-) Thank you very much.@sykac if your issue is solved, please don't forget to mark your post as such. Thanks.