I have tried for a while now to use the Magick++ libraries in my project but even though I have linked to the include files and lib files in my CMake files, I still get a linker error whenever using the library in my code.
Here is my header file where I have tried to make my class and use the Image class from Magick++. Beneath that is my CMakeLists.txt file where I have linked the lib files and the set the include paths. The last picture is the error I get, where it says that there are undefined references to the Image class when I try to instantiate the class in my main.cpp file after I have used the MinGW Makefiles generator with CMake. And lastly my main.cpp file where I try to make an object from the class CnnNet from CnnNet.h
#pragma once
#include <boost/filesystem.hpp>
#include <Eigen/Eigen>
#include "Magick++.h"
#include <vector>
#include <fstream>
#include <iostream>
using namespace std;
using namespace Magick;
class CnnNet{
public:
CnnNet(string folderPathX){
remove("trainFile.txt");
fstream myFile;
myFile.open("trainFiles.txt");
int lengPathX = 0;
for(auto & entry:boost::filesystem::directory_iterator(folderPathX))
myFile << entry.path() << "\n";lengPathX++;
string line;
ifstream file("trainFile.txt");
while(getline(file,line)){
char middle[line.length()];
string fileMiddle = "";
strcpy(middle,line.c_str());
char seper = '\\';
for(int i = 0;i<line.length();i++){
if(middle[i] == seper){
for(int inner = i+1;i<line.length()-2;inner++){
fileMiddle = fileMiddle+middle[inner];
cout << fileMiddle << endl;
}
break;
}
}
Image picture;
picture.read("train/"+fileMiddle);
}
};
};
My CMakeLists.txt file:
cmake_minimum_required(VERSION 3.20.2)
project(blackjackAI)
add_executable(blackjackAI main.cpp)
set(rootPath "C:/Users/Ejer/Desktop/c++/c++Dep")
add_definitions(-DMAGICKCORE_QUANTUM_DEPTH=16)
add_definitions(-DMAGICKCORE_HDRI_ENABLE=0)
target_include_directories(blackjackAI PRIVATE ${rootPath}/boost_1_77_0)
target_include_directories(blackjackAI PRIVATE ${rootPath}/eigen-3.4.0)
target_include_directories(blackjackAI PRIVATE ${rootPath}/ImageMagick-6.8.8/include/ImageMagick-6)
target_include_directories(blackjackAI PRIVATE C:/Users/Ejer/Desktop/c++/blackjackAI)
target_link_libraries(blackjackAI PRIVATE ${rootPath}/boost_1_77_0/stage/lib/libboost_filesystem-gcc10-mt-x64-1_77.a)
target_link_libraries(blackjackAI PRIVATE ${rootPath}/ImageMagick-6.8.8/lib/libMagick++-6.Q16.dll.a)
target_link_libraries(blackjackAI PRIVATE ${rootPath}/ImageMagick-6.8.8/lib/libMagickCore-6.Q16.dll.a)
target_link_libraries(blackjackAI PRIVATE ${rootPath}/ImageMagick-6.8.8/lib/libMagickWand-6.Q16.dll.a)
My error:
$ mingw32-make
Consolidate compiler generated dependencies of target blackjackAI
[ 50%] Building CXX object CMakeFiles/blackjackAI.dir/main.cpp.obj
[100%] Linking CXX executable blackjackAI.exe
/usr/lib/gcc/x86_64-pc-cygwin/10/../../../../x86_64-pc-cygwin/bin/ld: CMakeFiles\blackjackAI.dir/objects.a(main.cpp.obj):C:\Users\Ejer
\Desktop\c++\blackjackAI\main.cpp:(.text$_ZN6CnnNetC1ESs[_ZN6CnnNetC1ESs]+0x3f7): undefined reference to `Magick::Image::Image()'
/usr/lib/gcc/x86_64-pc-cygwin/10/../../../../x86_64-pc-cygwin/bin/ld: CMakeFiles\blackjackAI.dir/objects.a(main.cpp.obj):C:\Users\Ejer
\Desktop\c++\blackjackAI\main.cpp:(.text$_ZN6CnnNetC1ESs[_ZN6CnnNetC1ESs]+0x42d): undefined reference to `Magick::Image::read(std::str
ing const&)'
/usr/lib/gcc/x86_64-pc-cygwin/10/../../../../x86_64-pc-cygwin/bin/ld: CMakeFiles\blackjackAI.dir/objects.a(main.cpp.obj):C:\Users\Ejer
\Desktop\c++\blackjackAI\main.cpp:(.text$_ZN6CnnNetC1ESs[_ZN6CnnNetC1ESs]+0x44b): undefined reference to `Magick::Image::~Image()'
/usr/lib/gcc/x86_64-pc-cygwin/10/../../../../x86_64-pc-cygwin/bin/ld: CMakeFiles\blackjackAI.dir/objects.a(main.cpp.obj):C:\Users\Ejer
\Desktop\c++\blackjackAI\main.cpp:(.text$_ZN6CnnNetC1ESs[_ZN6CnnNetC1ESs]+0x51a): undefined reference to `Magick::Image::~Image()'
collect2: error: ld returned 1 exit status
CMakeFiles\blackjackAI.dir\build.make:102: recipe for target 'blackjackAI.exe' failed
mingw32-make[2]: *** [blackjackAI.exe] Error 1
CMakeFiles\Makefile2:81: recipe for target 'CMakeFiles/blackjackAI.dir/all' failed
mingw32-make[1]: *** [CMakeFiles/blackjackAI.dir/all] Error 2
Makefile:89: recipe for target 'al
My main.cpp file:
#include <vector>
#include <fstream>
#include <iostream>
#include "CnnNet.h"
using namespace Magick;
using namespace std;
int main(){
CnnNet obj("C:/Users/Ejer/Desktop/c++/blackjackAI/train");
return 0;
}