LNK2019: unresolved external symbol issue happens when calling a function from third party static library
-
Hi all,
I'm a newbie to QT. I have imported the third party static libraries to my project successfully. When I try to call a function in the main.cpp, it gives LNK2019: unresolved external symbol... issue. I'm compiling my project with the MSVC2017 32bit compiler. If the main function is empty, project builds successfully.
I went through a lot of forums. I would like to know the exact reason for this. I tried every possible solutions that worked for others. But yet not able to find a solution for my issue.
Thanks in advance!
-
unresolved external symbol
This clearly indicates that
- Either your library is not found in the directory or
- Method which you are trying to access is not there in library
- Library is compiled using different compiler and u r using MSCVC
- Library is 64 bit and your project 32 bit.
Just check all this.
-
Hi all,
I'm a newbie to QT. I have imported the third party static libraries to my project successfully. When I try to call a function in the main.cpp, it gives LNK2019: unresolved external symbol... issue. I'm compiling my project with the MSVC2017 32bit compiler. If the main function is empty, project builds successfully.
I went through a lot of forums. I would like to know the exact reason for this. I tried every possible solutions that worked for others. But yet not able to find a solution for my issue.
Thanks in advance!
I want to add something to @dheerendra's list.
It might be silly question, but are you actually linking against the external library?
-
unresolved external symbol
This clearly indicates that
- Either your library is not found in the directory or
- Method which you are trying to access is not there in library
- Library is compiled using different compiler and u r using MSCVC
- Library is 64 bit and your project 32 bit.
Just check all this.
Point 1 and 4 you have mentioned are already checked. I will check the others as well.
-
I want to add something to @dheerendra's list.
It might be silly question, but are you actually linking against the external library?
-
@Uddo_ud said in LNK2019: unresolved external symbol issue happens when calling a function from third party static library:
I didn't get your question. Can you explain it further
Is your app linked against that library? Did you add the lib to your pro file (you can show your pro file so we can check)?
-
@Uddo_ud said in LNK2019: unresolved external symbol issue happens when calling a function from third party static library:
I didn't get your question. Can you explain it further
Is your app linked against that library? Did you add the lib to your pro file (you can show your pro file so we can check)?
Yes I added the libs to my .pro file.
win32: LIBS += -L$$PWD/engine/lib/PVR3_PC_EMU/ -llibanimation-vc90-mt-s
INCLUDEPATH += $$PWD/engine/lib/PVR3_PC_EMU
DEPENDPATH += $$PWD/engine/lib/PVR3_PC_EMUwin32:!win32-g++: PRE_TARGETDEPS += $$PWD/engine/lib/PVR3_PC_EMU/libanimation-vc90-mt-s.lib
I want to use another engine libraries to do the task and QT act as a wrapper in that case. However I couldn't even call at least one function successfully.
Is there any solid way to include third party static libraries?
-
Yes I added the libs to my .pro file.
win32: LIBS += -L$$PWD/engine/lib/PVR3_PC_EMU/ -llibanimation-vc90-mt-s
INCLUDEPATH += $$PWD/engine/lib/PVR3_PC_EMU
DEPENDPATH += $$PWD/engine/lib/PVR3_PC_EMUwin32:!win32-g++: PRE_TARGETDEPS += $$PWD/engine/lib/PVR3_PC_EMU/libanimation-vc90-mt-s.lib
I want to use another engine libraries to do the task and QT act as a wrapper in that case. However I couldn't even call at least one function successfully.
Is there any solid way to include third party static libraries?
@Uddo_ud said in LNK2019: unresolved external symbol issue happens when calling a function from third party static library:
-llibanimation-vc90-mt-s
You should remove the "lib" prefix:
win32: LIBS += -L$$PWD/engine/lib/PVR3_PC_EMU/ -lanimation-vc90-mt-s
To add a static lib do
LIBS += PATH_TO_LIB_DIR/libLIBNAME.a
-
@Uddo_ud said in LNK2019: unresolved external symbol issue happens when calling a function from third party static library:
-llibanimation-vc90-mt-s
You should remove the "lib" prefix:
win32: LIBS += -L$$PWD/engine/lib/PVR3_PC_EMU/ -lanimation-vc90-mt-s
To add a static lib do
LIBS += PATH_TO_LIB_DIR/libLIBNAME.a
First of all "libanimation-vc90-mt-s.lib" is the name of the library file and "lib" you have focused is not a prefix.
Secondly, there is no "libanimation-vc90-mt-s.a" file in my libs folder. I tried to add as you said and ended up with "file not found" error.
-
First of all "libanimation-vc90-mt-s.lib" is the name of the library file and "lib" you have focused is not a prefix.
Secondly, there is no "libanimation-vc90-mt-s.a" file in my libs folder. I tried to add as you said and ended up with "file not found" error.
-
First of all "libanimation-vc90-mt-s.lib" is the name of the library file and "lib" you have focused is not a prefix.
Secondly, there is no "libanimation-vc90-mt-s.a" file in my libs folder. I tried to add as you said and ended up with "file not found" error.
@Uddo_ud said in LNK2019: unresolved external symbol issue happens when calling a function from third party static library:
"vc90" looks like a very old version of MS C++ compiler. Is that still compatible with the current version?
-
@Uddo_ud What is the whole file name of libanimation-vc90-mt-s.lib?
When adding libs with -l the lib prefix must be removed.Static lib was just an example, on Windows it may be different (.lib maybe?).
-
@Uddo_ud said in LNK2019: unresolved external symbol issue happens when calling a function from third party static library:
"vc90" looks like a very old version of MS C++ compiler. Is that still compatible with the current version?
-
Hi,
Visual Studio compilers are not compatible one with the other except for VS2017 which is backward compatible with VS2015 There for you can't mix and match libraries.
-
@Uddo_ud said in LNK2019: unresolved external symbol issue happens when calling a function from third party static library:
"vc90" looks like a very old version of MS C++ compiler. Is that still compatible with the current version?
"vc90" looks like a very old version of MS C++ compiler. Is that still compatible with the current version?
I built the libraries in VS2015 and included those to Qt project and compile using MSVC2017 32bit and MSVC2015 32bit both. Most of the linker issues were solved but some are remain still.
-
"vc90" looks like a very old version of MS C++ compiler. Is that still compatible with the current version?
I built the libraries in VS2015 and included those to Qt project and compile using MSVC2017 32bit and MSVC2015 32bit both. Most of the linker issues were solved but some are remain still.
-
Most of the linker issues were solved but some are remain still.
are they related to this library or something else?
To refer I previously sent only one library (libanimation-vc90-mt-s.lib). There are 5 libraries. The problem with the libanimation-vc90-mt-s.lib is solved now. Now the problem is with the libloader-vc90-mt-s.lib. All the included libraries are now build in VS2015.
-
To refer I previously sent only one library (libanimation-vc90-mt-s.lib). There are 5 libraries. The problem with the libanimation-vc90-mt-s.lib is solved now. Now the problem is with the libloader-vc90-mt-s.lib. All the included libraries are now build in VS2015.
-
Additionally,
This is an existing VS project I'm trying to do using QT. I built the VS solution in VS2015 and VS2017. Both work fine with the vc90 libraries. Issues occur when comes to QT.
Is that a problem with QT creator?
Is that a problem with QT creator?
Well, Creator calls qmake to create the Makefiles and afterwards nmake/jom to build the project. The compiler and linker are exactly the same as in VS itself.
The only thing I can imagine is that some environment paths are not correctly so the linker pulls in something different.
What's a bit of a problem is, the linker command line does not contain the objects list, they are rather in a temporary file. Debugging this is painful...
Edit: Can you please give a concrete example of this linker error? Is it for pure C or C++ symbols?
-
Is that a problem with QT creator?
Well, Creator calls qmake to create the Makefiles and afterwards nmake/jom to build the project. The compiler and linker are exactly the same as in VS itself.
The only thing I can imagine is that some environment paths are not correctly so the linker pulls in something different.
What's a bit of a problem is, the linker command line does not contain the objects list, they are rather in a temporary file. Debugging this is painful...
Edit: Can you please give a concrete example of this linker error? Is it for pure C or C++ symbols?
Here is the error log
Is it for pure C or C++ symbols?
I didn't get this.
The only thing I can imagine is that some environment paths are not correctly so the linker pulls in something different.
Is this means the build environment settings in the QT project? I will check it.
In the project we have included <windows.h>. Path to the windows SDK in the QT build environment might be the problem?