Qt OpenCV programm exits with code -1073741515 - c++

What i want to do
I try to use opencv and run a short example program.
Problem
It exits with code -1073741515. I never managed to use openCV on any of the 4 systems i tried, so i do something wrong but don't know what.
I had diffrenet errors using different attempts (undefined reference, crashing programm without error code, etc.), this here is the just simplest example.
What i figured out
Another post told me, that -1073741515 is equal to 0xC0000135 meaning STATUS_DLL_NOT_FOUND.
What i tried
The programm crashes, if include #include <opencv2/core/core.hpp>,
#include <opencv2/highgui/highgui.hpp>and
#include <opencv2/imgproc/imgproc.hpp>. When i comment them out, it runs wnd returns 0 as intended. I don't even need to use anything like cv::Mat or something to make it crash. That seems strange, because the code completion suggests me stuff from openCV, so it somehow sees it. Including #include <opencv2/opencv.hpp> instead leads to the same error code. Including something beginning with opencv (not opencv2) works, for example #include <opencv/cv.hpp>, but has not enough functionality.
Source file
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
using namespace std;
int main()
{
cv::Mat InputImage = cv::imread("C:/Users/Public/Pictures/Sample Pictures/Chrysanthemum.jpg");
if(!InputImage.empty())
cv::imshow("test", InputImage);
else
cout << "imgage is empty" << endl;
return 0;
}
Project file
TEMPLATE = app
CONFIG += console c++11
CONFIG -= app_bundle
CONFIG -= qt
INCLUDEPATH += D:/opencv/build/include
LIBS += -LD:/opencv/build/x64/vc14/lib
LIBS += -lopencv_world343d
LIBS += -lopencv_world343
SOURCES += \
main.cpp
Relevant folders
Include path:
libs:
project:
build (copied the libs to the release/debug folders too):
Versions
QT 5.10.1
MSVC17 64bit Compiler
Windows 7 Enterprise 64bit
openCV 3.4.3 (vc14/vc15)

As Jiu pointed out in the comment above, the solution was simple:
Copy the .dll not the .lib and it works.

Related

Using MATLAB API in C++, matOpen not working

I am writing a piece of code to access MATLAB files, my program compiles but crashes when I call matOpen. When I try to debug the code, the debugger also exits without reaching the offending line of code. I am working in Qt, and I am not too sure if I have done my includes properly.
.pro file
INCLUDEPATH += "C:\Program Files\MATLAB\R2018a\extern\include"
LIBS += "C:\Program Files\MATLAB\R2018a\extern\lib\win64\microsoft\libmx.lib"
LIBS += "C:\Program Files\MATLAB\R2018a\extern\lib\win64\microsoft\libmat.lib"
SOURCES += \
main.cpp
main.cpp
#include <stdlib.h>
#include <vector>
#include <mat.h>
int main(int argc, char *argv[])
{
MATFile *mfPtr;
const char *file = "data.mat";
mfPtr = matOpen(file,"r"); //code runs successfully without this line
return 0;
}
I am compiling using Desktop Qt 5.11.0 MSVC2017 64-bit and my MATLAB version is 2018a. I have also tried deleting the build folder and rebuilding.
Try this
E:\CodePath>gcc *.c -IC:\PROGRA~1\MATLAB\R2018a\extern\include -LC:\PROGRA~1\MATLAB\R2018a\extern\lib\win64\mingw64 -o code -l libmat -l libmx
Place libmat.dll and libmx.dll in the CodePath
I could not get it to work with the Matlab libraries either. For everyone looking for a different approach to write MAT files from C++, I recommend this open source project: https://github.com/jkriege2/TinyMAT

Running dlib on Qt c++

I'm trying to add dlib library to Qt project to run fhog_object_detector_ex.cpp file on ubuntu. I've built dlib using CMake and now i'm trying to run it in Qt.I have added these lines in myproject.pro
SOURCES += $$PWD/dlib-19.2/dlib/all/source.cpp
INCLUDEPATH += $$PWD/dlib-19.2
LIBS += $$PWD/dlib19.2/examples/build/dlib_build/libdlib.a
LIBS += -pthread
I am including these headers in code:
#include <dlib/svm_threaded.h>
#include <dlib/gui_widgets.h>
#include <dlib/image_processing.h>
#include <dlib/data_io.h>
but when i run the program i got errors, here are some errors:enter image description here
Please help me to deal with it.
You need to link to X11 in addition to pthread.

Using gdcm libs in UE4

For my UE4 project I want to use the GDCM libraries for C++ to load CT Scans. So I really tried a lot the last few days but I'm still not able to use GDCM... But where is the error? Can someone help me?
I created the dll and lib files with CMake (VS 2013 Win64) successfully.
I put all the libs in ...Unreal Projects\VolumeImport\ThirdParty\Includes\GDCM\Libraries
I added each of the 16 libs in the VolumeImport.Build.cs with
PublicAdditionalLibraries.Add(Path.Combine(LibrariesPath, "gdcmMSFF.lib"));
PublicAdditionalLibraries.Add(Path.Combine(LibrariesPath, "gdcmCommon.lib")); ...
I put all the header files in Unreal Projects\VolumeImport\ThirdParty\Includes\GDCM\Includes
I set the Includepath to this location in the project properties.
I put all the dlls in C:\Windows\System32
Then I used the headers:
#include "VolumeImport.h"
#include <gdcmVersion.h>
#include <gdcmReader.h>
#include <gdcmPixmapReader.h>
#include <gdcmImageReader.h>
#include <gdcmAttributes.h>
bool CTFileLoader::Convert_DICOM()
{
/** ... other well working code ... */
gdcm::Trace::SetDebug(false); gdcm::Trace::SetError(true);
gdcm::ImageReader reader;
reader.SetFilename(files_to_process[i].c_str());
if(!reader.Read()) { }
}
And I get an error in the gdcmMediaStorage.h: "error C4515: 'gdcm': Namespace uses itself."
I tried using different includes but this causes diffrent errors in diffrent headers... Is there something wrong with the libraries? But I'm sure they were added, because using only the gdcmTrace.h and the gdcm::Trace::functions works fine.
Now I got the solution:
In my VolumeImport.Build.cs I additionally added the DLLs:
PublicDelayLoadDLLs.Add(Path.Combine(LibrariesPath, "gdcmMSFF.dll")); ...
I changed the gdcmMediaStorage.h file: Comment out the "using namespace gdcm;"
Furthermore I had dynamic_cast problems with this big library and it needs to enable RTTI

Portaudio example "record_file.c" does not find "min"

First off, I alread got the smaller example paex_record.c to work.
I use MinGW on Windows8 and did compile portaudio from source, that's were I got the used libportaudio-2.dll from.
I set up a project in QtCreator (without gui) with following .pro-file:
TEMPLATE = app
CONFIG += console
CONFIG -= app_bundle
CONFIG -= qt
SOURCES += main.cpp
LIBS += -LC:/Audio/patest/paex_record_file -llibportaudio-2
My folder C:/Audio/patest/paex_record_file looks like:
libportaudio-2.dll
main.cpp
pa_ringbuffer.c
pa_ringbuffer.h
pa_util.h
paex_record_file.pro
paex_record_file.pro.user
portaudio.h
I copied both pa_ringbuffer and pa_util to this folder after they were not found.
Main.cppcontains the whole example file paex_record_file.c from the portaudio source.
There is an error when calling the ringbuffer (line 246 and 271: source):
"min" was not declared in this scope
I thought this example would directly run just like the record.c example.
Do I need to include further packages? I've tried algorithm, math, std and using namespace std, but still the error occurs. But I get the feeling it should work out off box, perhaps my include files or folder setup / linkage is not ok?
EDIT: Ok so I just defined a min-function on my own. Now it throws different error:
undefined reference to "PaUtil_GetRingBufferReadAvailable"
and a couple more of this kind. There is probably a lib missing to be linked, having a look...
I also had this linking error trying to compile paex_record_file.c. Turns out you need to compile pa_ringbuffer.c before compiling the main file. There's also an external dependency on some alloc function, so you need to change 2 lines in the file.
I'm not savvy of qt but you need to do something like:
SOURCES += pa_ringbuffer.c main.cpp
Here's how I compile with MinGW:
Changes inside paex_record_file.c
Line 313 : data.ringBufferData = (SAMPLE *) malloc( numBytes );
Line 443 : free( data.ringBufferData );
Compile with MinGW:
gcc -o p_rec.exe C:\path_to_portaudio\portaudio\common\pa_ringbuffer.c \
paex_record_file.c -lportaudio \
-IC:\path_to_portaudio\portaudio\src\common
I didn't get the min problem, but perhaps you can try to remove the ifdef guard and try to recompile.
#ifdef _WIN32
#include <windows.h>
#include <process.h>
#endif
to
#include <windows.h>
#include <process.h>

C++ erro:undefined reference to `EnumProcesses#12

I'm trying to get list of running processes with EnumProcesses.
However when I try to compile I receive this exception:
Undefined reference to `EnumProcesses#12'
I'm using eclipse Mingw and XP.
I have tried adding -lpsapi option but it seems not work.
This is code I'm using:
#include <iostream>
#include <windows.h>
#include <psapi.h>
int main() {
DWORD pid[100], bytesr;
EnumProcesses(pid, sizeof(pid), &bytesr);
return 0;
}
Just to clarify as this may be a bit confusing for beginners.
In the case of Qt, you need to add this to your .pro file
win32:LIBS += -lpsapi
another example is to add the kernel32 library to your project, use:
win32:LIBS += -lkernel32
Hope this can help someone