using QuaZip on Windows with VS2008 - qt

I'm using QT4.7.3, VS2008 and trying to add QuaZip library.
I got QuaZip, Zlib and compile it, and then I can make "quazip.lib" file.
I added quazip.lib to "Project property->Configuration Properties->Linker->Input->Additional Dependencies" and include pathes.
I wrote the source code as below.
#include "Updater.h"
#include "quazip.h"
Updater::Updater(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
ui.setupUi(this);
QuaZip *qZip = new QuaZip();
}
but, here, I stuck in problem.
Error message is shown as below.
Updater.obj : error LNK2019: unresolved external symbol
"__declspec(dllimport) public: _thiscall QuaZip::QuaZip(void)"
(_imp_??0QuaZip##QAE#XZ) referenced in function "public: __thiscall
Updater::Updater(class QWidget *,class QFlags)"
(??0Updater##QAE#PAVQWidget##V?$QFlags#W4WindowType#Qt#####Z)
1>.\updater.exe : fatal error LNK1120: 1 unresolved externals
I know this error occurs when declaration exists but definition doesn't exists.
As a result of find QuaZip constructor, I found as below.
QuaZip::QuaZip():
p(new QuaZipPrivate(this))
{
}
How can I make it correct?
Thank you for any comment.

I have found the following message in Quazip's README file:
If you want to include QuaZIP sources directly into your project or if
you want to use QuaZIP compiled as a static library using
"qmake CONFIG+=statliclib", you have to define the QUAZIP_STATIC macro,
otherwise you're likely to run into problems as QuaZIP symbols will be
marked as dllimported.
Maybe that will help you.

Related

How to build Crypto++ 5.6.2 in for Qt with Visual Studio 2013?

I'm trying to build Crypto++ 5.6.2 in for Qt with Visual Studio 2013, but its producing errors. Here is what I've done so far.
Downloaded Crypto++ 5.6.2
Downloaded vs2010.zip and vs2010-dynamic.zip and overwrite the exiting project files.
The page says this about vs2010-dynamic.zip, but the ZIP includes only cryptest.sln for VS2005. Just a single file. But anyway, I used the file:
archive of a pre-converted solution file, project files and filters for Visual Studio 2010 and above."
I then:
Opened cryptest.sln in MSVC2013, and set "Multi-threaded DLL (/MD)" for each project (project --> properties --> C/C++ --> Code Generation --> Runtime Library --> /MD)
Build --> 'Batch Build' --> Check cryptdll, cryptest, cryptlib, dlltest (Release|win32) --> Build
It resulted in a DLL and LIB in DLL_Output directory. I then:
Moved the DLL to the directory where Qt executable resides.
In Qt, I added two lines to test.pro:
INCLUDEPATH += "../extern/msvc2013/cryptopp562/include"
LIBS += -L"..\extern\msvc2013\cryptopp562\include\cryptopp\Win32\DLL_Output\Release" -lcryptopp
But in Qt, I've got the following errors:
mainwindow.obj:-1: error: LNK2001: unresolved external symbol "public: virtual unsigned __int64 __thiscall CryptoPP::ThreadUserTimer::GetCurrentTimerValue(void)" (?GetCurrentTimerValue#ThreadUserTimer#CryptoPP##UAE_KXZ)
mainwindow.obj:-1: error: LNK2001: unresolved external symbol "public: virtual unsigned __int64 __thiscall CryptoPP::ThreadUserTimer::TicksPerSecond(void)" (?TicksPerSecond#ThreadUserTimer#CryptoPP##UAE_KXZ)
mainwindow.obj:-1: error: LNK2019: unresolved external symbol "class CryptoPP::NameValuePairs const & const CryptoPP::g_nullNameValuePairs" (?g_nullNameValuePairs#CryptoPP##3ABVNameValuePairs#1#B) referenced in function "public: __thiscall CryptoPP::HMAC::HMAC(unsigned char const *,unsigned int)" (??0?$HMAC#VSHA256#CryptoPP###CryptoPP##QAE#PBEI#Z)
release\user_account_registration.exe:-1: error: LNK1120: 3 unresolved externals
Do you have any ideas why I am getting the errors?
Any help/comment/insight would be really appreciated.
mainwindow.obj:-1: error: LNK2001: unresolved external symbol "public: virtual unsigned __int64 __thiscall CryptoPP::ThreadUserTimer::GetCurrentTimerValue(void)" (?GetCurrentTimerValue#ThreadUserTimer#CryptoPP##UAE_KXZ)
mainwindow.obj:-1: error: LNK2001: unresolved external symbol "public: virtual unsigned __int64 __thiscall CryptoPP::ThreadUserTimer::TicksPerSecond(void)" (?TicksPerSecond#ThreadUserTimer#CryptoPP##UAE_KXZ)
mainwindow.obj:-1: error: LNK2019: unresolved external symbol "class CryptoPP::NameValuePairs const & const CryptoPP::g_nullNameValuePairs" (?g_nullNameValuePairs#CryptoPP##3ABVNameValuePairs#1#B) referenced in function "public: __thiscall CryptoPP::HMAC::HMAC(unsigned char const *,unsigned int)" (??0?$HMAC#VSHA256#CryptoPP###CryptoPP##QAE#PBEI#Z)
If you look at the source code for hrtimer.h, ThreadUserTimer is missing CRYPTOPP_DLL. That means the DLL does not export ThreadUserTimer (and many other classes).
In general, you should avoid the FIPS DLL unless you have a hard requirement to do so. Its special purpose, and its not easy to work with. It also has Operational Environment requirements from FIPS 140-2. I doubt you want to limit yourself to Visual Studio 2005 and Windows Server 2003.
If you insist on using the FIPS DLL, then you need to link against the DLL as expected. "As expected" means you use the cryptopp.lib import library at compile/link time; and cryptopp.dll at runtime. You also have to link again cryptlib.lib to get the missing classes, like ThreadUserTimer, while setting CRYPTOPP_IMPORTS to avoid duplicate symbols when using both libraries.
Instead of using the DLL, download the updated (and fixed) vs2010-dynamic.zip. Use it to build the Crypto++ library and then use the static library. "Use the static library" means to link against cryptlib.lib only.
The project files from vs2010-dynamic.zip might reference some source files that you don't have because its built from the latest stable sources. If the source file is missing, then simply delete it from the project file. Off the top of my head, Crypto++ 5.6.2 should be missing HKDF, RDRAND, RDSEED, ChaCha, BLAKE2, Base64URLEncoder, Base64URLDecoder, etc. It also lacks the rename of bench.cpp to bench1.cpp.
The Visual Studio wiki page has more information on Windows project files and artifacts like cryptlib.lib.
INCLUDEPATH += ".../cryptopp562/include"
LIBS += -L"...\cryptopp562\include\cryptopp\Win32\DLL_Output\Release" -lcryptopp
I think you should use only -lcryptlib because its the static library, and it has everything you need. The path to the library is $(Platform)\Output\$(Configuration), but I don't know how to translate it into something QT composer can use.
Otherwise, I think you need to specify both -lcryptopp -lcryptlib, and add CRYPTOPP_IMPORTS to preprocessor definitions.
vs2010.zip, vs2010-dynamic.zip and vs2005-dynamic.zip are built from the latest GitHub sources. As of this writing (JUN 1 2016), that's effectively pre-Crypto++ 5.6.4. If you are using the ZIP files with a down level Crypto++, like 5.6.2 or 5.6.3, then you will run into minor problems.
There are two minor problems I am aware. First is a rename of bench.cpp to bench1.cpp. Its error is either:
C1083: Cannot open source file: 'bench1.cpp': No such file or directory
LNK2001: unresolved external symbol "void __cdecl OutputResultOperations(char const *,char const *,bool,unsigned long,double)" (?OutputResultOperations##YAXPBD0_NKN#Z)
The fix is to either (1) open cryptest.vcxproj in notepad, find bench1.cpp, and then rename it to bench.cpp. Or (2) rename bench.cpp to bench1.cpp on the filesystem.
The second problem is a little trickier because its a moving target. Down level releases, like 5.6.2 or 5.6.3, are missing the latest classes available in GitHub. They include HKDF (5.6.3), RDRAND (5.6.3), RDSEED (5.6.3), ChaCha (5.6.4), BLAKE2 (5.6.4), Poly1305 (5.6.4), etc.
The fix is to remove the missing source files from the Visual Studio project files since they don't exist for the down level releases.
Another option is to add the missing class files from the latest sources, but there could be complications. For example, many of the sources subtly depend upon the latest config.h, cpu.h and cpu.cpp. The "subtlety" is you won't realize you are getting an under-performing class.
An example of under-performing class is BLAKE2. config.h adds compile time ARM-32 and ARM-64 detection. cpu.h and cpu.cpp adds runtime ARM instruction detection. If you add BLAKE2 without the other files, then none of the detection occurs and you get a straight C/C++ implementation. The NEON implementation runs around 9 to 12 cycles per byte, while the C/C++ implementation runs around 40 cycles per byte.

'clUnloadCompiler': was declared deprecated when trying to compile OpenCL

I am trying to compile this. I am using the AMD SDK. I am using the header files that come with the aforementioned SDK and they are located in:
C:\Program Files (x86)\AMD APP\include\CL
The tutorial states:
Header files
Just like any other external API used in C++, you must include a header file when using the OpenCLâ„¢ API. Usually, this is in the directory CL within the primary include directory. For the C++ bindings we have (replace the straight C API with cl.h):
I found that last bit a little confusing. I am using both .h and .hpp
#include <CL/cl.h> when this is used it will compile the checkErr function
#include <CL/cl.hpp> when this is used it gives me access to the cl namespace
When I try to compile this code it fails with:
'clUnloadCompiler': was declared deprecated
ADDITIONAL DETAILS (after removing #include <CL/c.h>)
It now gives the following list of errors:
error C4996: Error 2 error LNK2019: unresolved external symbol _clReleaseCommandQueue#4 referenced in function "public: static int __cdecl cl::detail::ReferenceHandler<struct _cl_command_queue *>::release(struct _cl_command_queue *)" (?release#?$ReferenceHandler#PAU_cl_command_queue###detail#cl##SAHPAU_cl_command_queue###Z)
error LNK2019: unresolved external symbol _clReleaseContext#4 referenced in function "public: static int __cdecl cl::detail::ReferenceHandler<struct _cl_context *>::release(struct _cl_context *)" (?release#?$ReferenceHandler#PAU_cl_context###detail#cl##SAHPAU_cl_context###Z)
In properties for my project I have:
added C:\Program Files (x86)\AMD APP\include\ as an additional include directory
added C:\Program Files (x86)\AMD APP\lib\x86_64 as an additional library directory
added OpenCL.lib as an additional dependency
The errors I listed happen regardless of whether or not I take the last two steps. That is, the last two do not seem to be helping or harming anything
Summary of answers I provided in comments:
For a C++ application, you only need to #include <CL/cl.hpp>
Make sure you are linking with the correct OpenCL.lib (32-bit vs. 64-bit).
That's because clUnloadCompiler() was deprecated in OpenCL 1.2.
Add
#define CL_USE_DEPRECATED_OPENCL_1_1_APIS
to your code before
#include <CL/cl.h>
#include <CL/cl.hpp>

Linker errors when using OpenGL in Qt

I am trying to use OpenGL with Qt.
I was following this example: http://qt-project.org/doc/qt-5.0/qtgui/openglwindow.html using Qt 5 build for msvc2012. In the end I am getting the following errors:
error LNK2019: unresolved external symbol _imp_glClear#4 referenced in function "public: virtual void __thiscall OpenGLWindow::render(void)" (?render#OpenGLWindow##UAEXXZ) D:\Documents\Code\Qt Projects\qttest2\qttest2\openglwindow.obj qttest2
error LNK2001: unresolved external symbol _imp_glClear#4 D:\Documents\Code\Qt Projects\qttest2\qttest2\trianglewindow.obj qttest2
error LNK2019: unresolved external symbol _imp_glDrawArrays#12 referenced in function "public: virtual void __thiscall TriangleWindow::render(void)" (?render#TriangleWindow##UAEXXZ) D:\Documents\Code\Qt Projects\qttest2\qttest2\trianglewindow.obj qttest2
error LNK2019: unresolved external symbol _imp_glViewport#16 referenced in function "public: virtual void __thiscall TriangleWindow::render(void)" (?render#TriangleWindow##UAEXXZ) D:\Documents\Code\Qt Projects\qttest2\qttest2\trianglewindow.obj qttest2
error LNK1120: 3 unresolved externals D:\Documents\Code\Qt Projects\qttest2\Win32\Debug\qttest2.exe qttest2
I can see that it has to do with the linking of OpenGL functions but I don't have much knowledge about linking.
I get the errors even if I copy the source code in from the OpenGLWindow example.
You must add opengl32.lib to the list of linked libraries. Adding the OpenGL module in the QtCreator .pro file should do the trick
QT += opengl
Have you added the OpenGL module in your pro file like this:
QT += opengl
If you use Qt 5, then add next lib in you project file (*.pro)
LIBS += -LD:\Qt\5.5\mingw492_32\lib\libQt5OpenGL.a -lopengl32
D:\Qt\5.5\mingw492_32\lib\libQt5OpenGL.a is path.
In linux environment [mesa] library installation can resolve the issue.
[lib32-mesa, an open-source implementation of the OpenGL specification]
[pacman -S mesa ] *Arch Linux
[apt-get install mesa] *ubuntu/Mint/Raspbian

error with Qt libraries in visual c++ application

I am working with a Qt based project in visual c++. Initially I installed Qt 4.7.3 and imported its libraries in visual c++. Everything was working fine. yesterday, I ran "configure" command on command on command prompt. After that I am receiving error messages while compiling the program.
So I uninstalled Qt 4.7.3 and installed 4.7.4 and configured again the libraries. But still I am receiving the same error messages.
Qwt.lib(moc_qwt_scale_widget.obj) : error LNK2001: unresolved external symbol "public: static struct QMetaObject const QWidget::staticMetaObject" (?staticMetaObject#QWidget##2UQMetaObject##B)
1>Qwt.lib(moc_qwt_dyngrid_layout.obj) : error LNK2001: unresolved external symbol "public: static struct QMetaObject const QLayout::staticMetaObject" (?staticMetaObject#QLayout##2UQMetaObject##B)
1>..\Debug\project.exe : fatal error LNK1120: 9 unresolved externals
1>
Can anyone please help me in this issue.
Its a linker error.. you need to compile your headers that contain Q_OBJECT macro with moc compiler. Look at this guys solutions
Q_OBJECT Problem in Visual C++

QtSql program doesn't work with shared lib configuration

I wrote a sample program using QSqlDatabase object two years ago with a Qt configuration that depended on static libraries. It compiled ran as expected. Some time last year, I rebuilt the configuration using shared libraries and now I am getting the following errors.
Here is the error:
main.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) publ
ic: __thiscall QSqlDatabase::~QSqlDatabase(void)" (__imp_??1QSqlDatabase##QAE#XZ
) referenced in function _main
...
debug\qtsql.exe : fatal error LNK1120: 12 unresolved externals
Here are my includes and the instantiation of the object in main.cpp:
#include <Qt>
#include <QtDebug>
#include <QtSql\QSqlDatabase>
#include <QFile>
#include <QtSql\QSqlQuery>
#include <QString>
#include <QVariant>
#include <QDate>
int main()
{
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
...
Also, here is my .pro file:
TEMPLATE = app
TARGET =
DEPENDPATH += . versions
INCLUDEPATH += .
# Input
SOURCES += main.cpp
# Libraries
QMAKE_LIB_DIR += C:\\Qt\\4.7.0\\lib
I thought that last line in the .pro file would give me a link to any library I might need in Qt. I'm pretty ignorant of what it takes to link to the Qt .dll's.
What am I missing to get the program to see the QSqlDatabase library?
Also, must I specify the library even though I have given it the header file and library directory?
CONFIG += qt
QT += sql
might be missing here (link to qmake docs)
Here is a link to the Qt sql examples. Perhaps you find inspiration/guidance there.

Resources