Solved Can't add HDF5 library in empty Qt-project
-
@Please_Help_me_D said in Can't add HDF5 library in empty Qt-project:
LIBS += "-LC:/apps/MSVC_apps_debug/HDF5/lib/lhdf5_D.lib"
This is not a correct syntax. Please try
LIBS += "C:/apps/MSVC_apps_debug/HDF5/lib/hdf5_D.lib"
and so on
-
@Konstantin-Tokarev I just tried:
LIBS += "C:/apps/MSVC_apps_debug/HDF5/lib/lhdf5_cpp_D.lib" LIBS += "C:/apps/MSVC_apps_debug/HDF5/lib/lhdf5_D.lib" LIBS += "C:/apps/MSVC_apps_debug/HDF5/lib/hdf5_hl_cpp_D.lib" LIBS += "C:/apps/MSVC_apps_debug/HDF5/lib/hdf5_hl_D.lib" LIBS += "C:/apps/MSVC_apps_debug/HDF5/lib/hdf5_tools_D.lib" INCLUDEPATH += C:/apps/MSVC_apps_debug/HDF5/include DEPENDPATH += C:/apps/MSVC_apps_debug/HDF5/include
I get an error:
error: LNK1104: can't open file "C:\apps\MSVC_apps_debug\HDF5\lib\lhdf5_cpp_D.lib"
Does it depend that libraries were built with GUI Cmake and the project I run with qmake? -
@Please_Help_me_D You have an error in your path: file name is
hdf5_cpp_D.lib
while you are usinglhdf5_cpp_D.lib
-
@Konstantin-Tokarev i'm sorry, my mistake. I changed it to the correct name and the errors now are:
main.obj: -1: error: LNK2001: unresolved external character "" public: static class H5 :: FileAccPropList const & const H5 :: FileAccPropList :: DEFAULT "(? DEFAULT @ FileAccPropList @ H5 @@ 2AEBV12 @ EB)"
main.obj: -1: error: LNK2001: unresolved external character "" public: static class H5 :: FileCreatPropList const & const H5 :: FileCreatPropList :: DEFAULT "(? DEFAULT @ FileCreatPropList @ H5 @@ 2AEBV12 @ EB)"
etc...
debug \ HDF5.exe: -1: error: LNK1120: unresolved external elements: 6 -
Make sure that all paths correspond to existing files.Find in which library
H5 :: FileAccPropList
is defined -
@Konstantin-Tokarev I did
dumpbin /EXPORTS each_of_my_labrary
and I only found that FileAccPropList belongs to hdf5_cpp_D.lib.
One thing seemed to me interesting... When I built HDF5 libraries there was an option to include C++ libraries and I included them. Now output from dumpbin C and C++ libraries are very different. Here are few lines of dumpbin C.lib:Microsoft (R) COFF/PE Dumper Version 14.16.27030.1 Copyright (C) Microsoft Corporation. All rights reserved. Dump of file C:\apps\MSVC_apps_debug\HDF5\lib\hdf5_D.lib File Type: LIBRARY Exports ordinal name H5AC_BT H5AC_BT2_HDR H5AC_BT2_INT H5AC_BT2_LEAF H5AC_DRVRINFO H5AC_EARRAY_DBLK_PAGE H5AC_EARRAY_DBLOCK H5AC_EARRAY_HDR
And here are few lines of dumpbin C++.lib:
Microsoft (R) COFF/PE Dumper Version 14.16.27030.1 Copyright (C) Microsoft Corporation. All rights reserved. Dump of file C:\apps\MSVC_apps_debug\HDF5\lib\hdf5_cpp_D.lib File Type: LIBRARY Exports ordinal name ??0AbstractDs@H5@@IEAA@XZ (protected: __cdecl H5::AbstractDs::AbstractDs(void)) ??0AbstractDs@H5@@QEAA@AEBV01@@Z (public: __cdecl H5::AbstractDs::AbstractDs(class H5::AbstractDs const &)) ??0ArrayType@H5@@QEAA@AEBV01@@Z (public: __cdecl H5::ArrayType::ArrayType(class H5::ArrayType const &)) ??0ArrayType@H5@@QEAA@AEBVDataType@1@HPEB_K@Z (public: __cdecl H5::ArrayType::ArrayType(class H5::DataType const &,int,unsigned __int64 const *)) ??0ArrayType@H5@@QEAA@AEBVH5Location@1@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z (public: __cdecl H5::ArrayType::ArrayType(class H5::H5Location const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)) ??0ArrayType@H5@@QEAA@AEBVH5Location@1@PEBD@Z (public: __cdecl H5::ArrayType::ArrayType(class H5::H5Location const &,char const *)) ??0ArrayType@H5@@QEAA@XZ (public: __cdecl H5::ArrayType::ArrayType(void)) ??0ArrayType@H5@@QEAA@_J@Z (public: __cdecl H5::ArrayType::ArrayType(__int64))
How do you think, maybe C++ libraries were installed incorretly?
-
@Konstantin-Tokarev @SGaist @jsulm as you suspected the problem was that used wrong libraries. Those libraries whose names begin with lib are static. And those who don't those are shared (information from HDFGroup web-site, see picture).
Previously I tried to include shared libraries and they don't work (don't know why). Now I use static libraries and they work.
So I use the followng lines (it works):LIBS += "C:/apps/MSVC_apps_debug/HDF5/lib/libhdf5_cpp_D.lib" LIBS += "C:/apps/MSVC_apps_debug/HDF5/lib/libhdf5_D.lib" LIBS += "C:/apps/MSVC_apps_debug/HDF5/lib/libhdf5_hl_cpp_D.lib" LIBS += "C:/apps/MSVC_apps_debug/HDF5/lib/libhdf5_hl_D.lib" LIBS += "C:/apps/MSVC_apps_debug/HDF5/lib/libhdf5_tools_D.lib" INCLUDEPATH += C:/apps/MSVC_apps_debug/HDF5/include DEPENDPATH += C:/apps/MSVC_apps_debug/HDF5/include
Can you give me advise why shared libraries don't work? How should I decide whether to use shared or static libraries?
-
So you tried to link to .dll files which are the shared libraries but not what you use to link to on Windows.
.lib files can be either the static version of the libraries or an "import file" used to tell the linker what symbols it will have from the library. The usual way to know which type it is is by looking at its size. Small sizes suggest that you have the import file while bigger sizes suggest static libraries.
-
@SGaist thank you for information about the weight of static and shared libraries. One of my shared library weighs 380 kb and the same static library weighs 33 Mb.
I opened them with help of 7zip and I saw that shared .lib-file include .dll files, and static .lib-file includes .obj files (see picture).
Is there a connection between libraries .lib and .exe files and .dll files that are in the bin folder? -
I was talking about the .lib files themselves.
.dll are in any shared libraries.
-
I encountered a problem that when I build HDF5 without ZLIB I can run HDF5 library in Qt (as static library for example). But when building HDF5 with ZLIB=on then I can run HDF5 only as dynamic library and still I get error: LNK2001: unresolved external character "H5T_STD_I32BE_g" when I set format for my saving data like integer 32 big endian (or any other data formats). The other functionality works properly (for example I can create empty HDF5-files and add groups in them etc). What maybe the reason of this strange behaviour?
ZLIB, HDF5 builded in DEBUG mode.
If my HDF5 library depends on ZLIB library then in QMake should I add some strings about ZLIB? -
I added ZLIB library to the QMake and it worked :)
-
To the New Yaer event I got SSD-disk :)
So I decided to install Windows 10 x64 and now I have disk C:\ on SSD and HDD stores all my data from previous installed Windows 7 x64.I have strange situation... When I run Qt project that uses HDF5 library and this library is on old HDD then I can normally run it.
If I copy HDF5 library to the SSD then I get the following error:
error: C1083: Cannot open include file: 'hdf5.h': No such file or directoryI use:
#include "hdf5.h"
and in .pro file I have:
LIBS += С:/apps/MSVC_apps_debug/HDF5_1106/lib/libhdf5_D.lib \ С:/apps/MSVC_apps_debug/HDF5_1106/lib/libhdf5_hl_D.lib \ С:/apps/MSVC_apps_debug/ZLIB/lib/libzlib_D.lib INCLUDEPATH += С:/apps/MSVC_apps_debug/HDF5_1106/include \ С:/apps/MSVC_apps_debug/ZLIB/include DEPENDPATH += С:/apps/MSVC_apps_debug/HDF5_1106/include \ С:/apps/MSVC_apps_debug/ZLIB/include
By the way it doesn't depend if I recompile HDF5 library with installation folder on C:/ or just copy it from E:/ to C:/ (I mean copy from HDD to SSD). In both cases I get the same error.
Why Qt can't see this header file in include folder?
-
Did you check the build log to see if the paths you added are used ?
-
@SGaist As far as I see yes. I marked it with bold style.
The compilator output uses backslashes () and I use slash (/) when pointing a directory. In Windows 7 slashes worked normally, couldn't that be a reason in Windows 10?21:37:47: Launching: «C:\Qt\Tools\qtcreator-4.11.0\bin\jom.exe»
C:\Qt\Tools\qtcreator-4.11.0\bin\jom.exe -f Makefile.Debug
cl -c -nologo -Zc:wchar_t -FS -Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -Zi -MDd -W3 -w34100 -w34189 -w44996 -w44456 -w44457 -w44458 -wd4577 -wd4467 -EHsc /Fddebug\ReadSegy.vc.pdb -DUNICODE -D_UNICODE -DWIN32 -D_ENABLE_EXTENDED_ALIGNED_STORAGE -DWIN64 -DQT_DEPRECATED_WARNINGS -DQT_QML_DEBUG -DQT_CORE_LIB -I..\ReadSegy -I. -IС:/apps/MSVC_apps_debug/HDF5_1106/include -IС:/apps/MSVC_apps_debug/ZLIB/include -IC:\Qt\5.12.6\msvc2017_64\include -IC:\Qt\5.12.6\msvc2017_64\include\QtCore -Idebug -IC:\Qt\5.12.6\msvc2017_64\mkspecs\win32-msvc -Fodebug\ @C:\Users\tasik\AppData\Local\Temp\checkandwritehdf5.obj.4376.15.jom
checkandwritehdf5.cpp
cl -c -nologo -Zc:wchar_t -FS -Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -Zi -MDd -W3 -w34100 -w34189 -w44996 -w44456 -w44457 -w44458 -wd4577 -wd4467 -EHsc /Fddebug\ReadSegy.vc.pdb -DUNICODE -D_UNICODE -DWIN32 -D_ENABLE_EXTENDED_ALIGNED_STORAGE -DWIN64 -DQT_DEPRECATED_WARNINGS -DQT_QML_DEBUG -DQT_CORE_LIB -I..\ReadSegy -I. -IС:/apps/MSVC_apps_debug/HDF5_1106/include -IС:/apps/MSVC_apps_debug/ZLIB/include -IC:\Qt\5.12.6\msvc2017_64\include -IC:\Qt\5.12.6\msvc2017_64\include\QtCore -Idebug -IC:\Qt\5.12.6\msvc2017_64\mkspecs\win32-msvc -Fodebug\ @C:\Users\tasik\AppData\Local\Temp\readsegy.obj.4376.31.jom
readsegy.cpp
c:\users\tasik\documents\qt_projects\readsegy\readsegy.h(5): fatal error C1083: Cannot open include file: 'hdf5.h': No such file or directory
cl -c -nologo -Zc:wchar_t -FS -Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -Zi -MDd -W3 -w34100 -w34189 -w44996 -w44456 -w44457 -w44458 -wd4577 -wd4467 -EHsc /Fddebug\ReadSegy.vc.pdb -DUNICODE -D_UNICODE -DWIN32 -D_ENABLE_EXTENDED_ALIGNED_STORAGE -DWIN64 -DQT_DEPRECATED_WARNINGS -DQT_QML_DEBUG -DQT_CORE_LIB -I..\ReadSegy -I. -IС:/apps/MSVC_apps_debug/HDF5_1106/include -IС:/apps/MSVC_apps_debug/ZLIB/include -IC:\Qt\5.12.6\msvc2017_64\include -IC:\Qt\5.12.6\msvc2017_64\include\QtCore -Idebug -IC:\Qt\5.12.6\msvc2017_64\mkspecs\win32-msvc -Fodebug\ @C:\Users\tasik\AppData\Local\Temp\main.obj.4376.15.jom
main.cpp
c:\users\tasik\documents\qt_projects\readsegy\readsegy.h(5): fatal error C1083: Cannot open include file: 'hdf5.h': No such file or directory
c:\users\tasik\documents\qt_projects\readsegy\checkandwritehdf5.h(2): fatal error C1083: Cannot open include file: 'hdf5.h': No such file or directory
jom: C:\Users\tasik\Documents\Qt_Projects\build-ReadSegy-Desktop_Qt_5_12_6_MSVC2017_64_bit-Debug\Makefile.Debug [debug\checkandwritehdf5.obj] Error 2
jom: C:\Users\tasik\Documents\Qt_Projects\build-ReadSegy-Desktop_Qt_5_12_6_MSVC2017_64_bit-Debug\Makefile.Debug [debug\main.obj] Error 2
jom: C:\Users\tasik\Documents\Qt_Projects\build-ReadSegy-Desktop_Qt_5_12_6_MSVC2017_64_bit-Debug\Makefile.Debug [debug\readsegy.obj] Error 2
jom: C:\Users\tasik\Documents\Qt_Projects\build-ReadSegy-Desktop_Qt_5_12_6_MSVC2017_64_bit-Debug\Makefile [debug] Error 2 -
That's surprising... the slash/backslash conversion should be handled automatically for you.
What happens if you uses backslashes in your .pro file ?
-
@SGaist Now I wrote:
LIBS += С:\apps\MSVC_apps_debug\HDF5_1106\lib\libhdf5_D.lib \ С:\apps\MSVC_apps_debug\HDF5_1106\lib\libhdf5_hl_D.lib \ С:\apps\MSVC_apps_debug\ZLIB\lib\libzlib_D.lib INCLUDEPATH += С:\apps\MSVC_apps_debug\HDF5_1106\include \ С:\apps\MSVC_apps_debug\ZLIB\include DEPENDPATH += С:\apps\MSVC_apps_debug\HDF5_1106\include \ С:\apps\MSVC_apps_debug\ZLIB\include
and I get the same error:
C:\Users\tasik\Documents\Qt_Projects\ReadSegy\checkandwritehdf5.h:2: ошибка: C1083: Cannot open include file: 'hdf5.h': No such file or directoryThe compilator output:
22:10:58: Запускается: «C:\Qt\Tools\qtcreator-4.11.0\bin\jom.exe»
C:\Qt\Tools\qtcreator-4.11.0\bin\jom.exe -f Makefile.Debug
cl -c -nologo -Zc:wchar_t -FS -Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -Zi -MDd -W3 -w34100 -w34189 -w44996 -w44456 -w44457 -w44458 -wd4577 -wd4467 -EHsc /Fddebug\ReadSegy.vc.pdb -DUNICODE -D_UNICODE -DWIN32 -D_ENABLE_EXTENDED_ALIGNED_STORAGE -DWIN64 -DQT_DEPRECATED_WARNINGS -DQT_QML_DEBUG -DQT_CORE_LIB -I..\ReadSegy -I. -IС:\apps\MSVC_apps_debug\HDF5_1106\include -IС:\apps\MSVC_apps_debug\ZLIB\include -IC:\Qt\5.12.6\msvc2017_64\include -IC:\Qt\5.12.6\msvc2017_64\include\QtCore -Idebug -IC:\Qt\5.12.6\msvc2017_64\mkspecs\win32-msvc -Fodebug\ @C:\Users\tasik\AppData\Local\Temp\checkandwritehdf5.obj.7080.0.jom
checkandwritehdf5.cpp
c:\users\tasik\documents\qt_projects\readsegy\checkandwritehdf5.h(2): fatal error C1083: Cannot open include file: 'hdf5.h': No such file or directory
cl -c -nologo -Zc:wchar_t -FS -Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -Zi -MDd -W3 -w34100 -w34189 -w44996 -w44456 -w44457 -w44458 -wd4577 -wd4467 -EHsc /Fddebug\ReadSegy.vc.pdb -DUNICODE -D_UNICODE -DWIN32 -D_ENABLE_EXTENDED_ALIGNED_STORAGE -DWIN64 -DQT_DEPRECATED_WARNINGS -DQT_QML_DEBUG -DQT_CORE_LIB -I..\ReadSegy -I. -IС:\apps\MSVC_apps_debug\HDF5_1106\include -IС:\apps\MSVC_apps_debug\ZLIB\include -IC:\Qt\5.12.6\msvc2017_64\include -IC:\Qt\5.12.6\msvc2017_64\include\QtCore -Idebug -IC:\Qt\5.12.6\msvc2017_64\mkspecs\win32-msvc -Fodebug\ @C:\Users\tasik\AppData\Local\Temp\main.obj.7080.16.jom
main.cpp
c:\users\tasik\documents\qt_projects\readsegy\readsegy.h(5): fatal error C1083: Cannot open include file: 'hdf5.h': No such file or directory
jom: C:\Users\tasik\Documents\Qt_Projects\build-ReadSegy-Desktop_Qt_5_12_6_MSVC2017_64_bit-Debug\Makefile.Debug [debug\checkandwritehdf5.obj] Error 2
cl -c -nologo -Zc:wchar_t -FS -Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -Zi -MDd -W3 -w34100 -w34189 -w44996 -w44456 -w44457 -w44458 -wd4577 -wd4467 -EHsc /Fddebug\ReadSegy.vc.pdb -DUNICODE -D_UNICODE -DWIN32 -D_ENABLE_EXTENDED_ALIGNED_STORAGE -DWIN64 -DQT_DEPRECATED_WARNINGS -DQT_QML_DEBUG -DQT_CORE_LIB -I..\ReadSegy -I. -IС:\apps\MSVC_apps_debug\HDF5_1106\include -IС:\apps\MSVC_apps_debug\ZLIB\include -IC:\Qt\5.12.6\msvc2017_64\include -IC:\Qt\5.12.6\msvc2017_64\include\QtCore -Idebug -IC:\Qt\5.12.6\msvc2017_64\mkspecs\win32-msvc -Fodebug\ @C:\Users\tasik\AppData\Local\Temp\readsegy.obj.7080.16.jom
readsegy.cpp
c:\users\tasik\documents\qt_projects\readsegy\readsegy.h(5): fatal error C1083: Cannot open include file: 'hdf5.h': No such file or directory
jom: C:\Users\tasik\Documents\Qt_Projects\build-ReadSegy-Desktop_Qt_5_12_6_MSVC2017_64_bit-Debug\Makefile.Debug [debug\readsegy.obj] Error 2
jom: C:\Users\tasik\Documents\Qt_Projects\build-ReadSegy-Desktop_Qt_5_12_6_MSVC2017_64_bit-Debug\Makefile.Debug [debug\main.obj] Error 2
jom: C:\Users\tasik\Documents\Qt_Projects\build-ReadSegy-Desktop_Qt_5_12_6_MSVC2017_64_bit-Debug\Makefile [debug] Error 2Both variants are possible? That is useful because I always forget the way I should use slash or backslash :)
-
Well, by default use forward slashes. Qt does the conversion and you even have specific functions in QDir for converting if you need the native version.
Can you show the exact path where the header is located including the file name ?
-
@SGaist ok
i write from my phone now but it is here:
C:/apps/MSVC_debug/HDF5_1106/lib/libhdf5_D.lib
C:/apps/MSVC_debug/HDF5_1106/includeI probably mistaken a little but there is no spaces in path.
A little bit later i can copy the correct path -
@SGaist On SSD disk include directory that contains "hdf5.h" is in:
C:\apps\MSVC_apps_debug\HDF5_1106\include\hdf5.hAnd on HDD disk (that used to be the C:\ folder when I had Windows 7):
E:\apps\MSVC_apps_debug\HDF5_NO_MPI\include\hdf5.h