undefined reference to `Magick::Image::Image()'

168
27 января 2020, 22:30

Подскажите, чего не хватает?

main.cpp

#include <iostream>
#include "image.h"
#include <Magick++.h>
using namespace std;
using namespace Magick;
int main(int argc,char **argv)
{
    Magick::InitializeMagick(*argv);
    Magick::Image image;
      try {
        // Read a file into image object
        image.read( "girl.gif" );
        // Crop the image to specified size (width, height, xOffset, yOffset)
        image.crop( Geometry(100,100, 100, 100) );
        // Write the image to a file
        image.write( "x.gif" );
      }
      catch( Exception &error_ )
        {
          cout << "Caught exception: " << error_.what() << endl;
          return 1;
        }
    return 0;
}

image.cpp

#include "image.h"
#include <Magick++.h>
Image::Image()
{
}

image.h

#ifndef IMAGE_H
#define IMAGE_H
#include <vector>
using namespace std;
class Image
{
public:
    Image();

};
#endif // IMAGE_H

CMakeLists.txt c

make_minimum_required(VERSION 3.5)
project(IimageReadObj)
###add_executable(${PROJECT_NAME} "main.cpp")
find_program(MAGICK_CONFIG "Magick++-config")
# Ask about CXX and lib flags/locations
execute_process(COMMAND "${MAGICK_CONFIG}" "--cxxflags" OUTPUT_VARIABLE MAGICK_CXX_FLAGS)
execute_process(COMMAND "${MAGICK_CONFIG}" "--libs" OUTPUT_VARIABLE MAGICK_LD_FLAGS)
# Remove trailing whitespace (CMAKE warns about this)
string(STRIP "${MAGICK_CXX_FLAGS}" MAGICK_CXX_FLAGS)
string(STRIP "${MAGICK_LD_FLAGS}" MAGICK_LD_FLAGS)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 ${MAGICK_CXX_FLAGS} ${MAGICK_LD_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall ")

# Create a list with all .cpp source files
set( project_sources
   main.cpp
   image.cpp
)
# Create executable with all necessary source files
add_executable(${PROJECT_NAME}
  ${project_sources}
)
find_package(ImageMagick COMPONENTS Magick++)
include_directories(${ImageMagick_INCLUDE_DIRS})

/home/alexandr/programming/IimageReadObj/IimageReadObj/main.cpp:10: ошибка: undefined reference to Magick::InitializeMagick(char const*)' /home/alexandr/programming/IimageReadObj/IimageReadObj/main.cpp:11: ошибка: undefined reference toMagick::Image::Image()' /home/alexandr/programming/IimageReadObj/IimageReadObj/main.cpp:14: ошибка: undefined reference to Magick::Image::read(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)' /home/alexandr/programming/IimageReadObj/IimageReadObj/main.cpp:17: ошибка: undefined reference toMagick::Geometry::Geometry(unsigned long, unsigned long, long, long, bool, bool)' /home/alexandr/programming/IimageReadObj/IimageReadObj/main.cpp:17: ошибка: undefined reference to Magick::Image::crop(Magick::Geometry const&)' /home/alexandr/programming/IimageReadObj/IimageReadObj/main.cpp:17: ошибка: undefined reference toMagick::Geometry::~Geometry()' /home/alexandr/programming/IimageReadObj/IimageReadObj/main.cpp:20: ошибка: undefined reference to Magick::Image::write(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)' /home/alexandr/programming/IimageReadObj/IimageReadObj/main.cpp:11: ошибка: undefined reference toMagick::Image::~Image()' /home/alexandr/programming/IimageReadObj/IimageReadObj/main.cpp:17: ошибка: undefined reference to Magick::Geometry::~Geometry()' /home/alexandr/programming/IimageReadObj/IimageReadObj/main.cpp:11: ошибка: undefined reference toMagick::Image::~Image()' /home/alexandr/programming/IimageReadObj/build-IimageReadObj-Desktop_Qt_5_12_0_GCC_64bit-u0412u044bu043fu0443u0441u043a/CMakeFiles/IimageReadObj.dir/main.cpp.o:-1: ошибка: undefined reference to `typeinfo for Magick::Exception' :-1: ошибка: collect2: error: ld returned 1 exit status

Answer 1

Так вы объявляете в глобальном пространстве имён.

using namespace std;
class Image
{
public:
...
};

И пользоваться нужно так :

using namespace std;
using namespace Magick;
int main(int argc,char **argv)
{
::Image image;
}

Если вы хотите класс определить в другом пространстве, то так и надо писать.

namespace Magick {
class Image
    {
    public:
    ...
    };
}
READ ALSO
std::thread join - виснет [закрыт]

std::thread join - виснет [закрыт]

Хотите улучшить этот вопрос? Переформулируйте вопрос, чтобы он соответствовал тематике «Stack Overflow на русском»

135
Причем здесь лямбда?

Причем здесь лямбда?

Анонимные делегаты в Java 8 не являются лямбда-выражениями, тк

154
Не удается в фрагменте получить методы из интерфейса. Как это можно исправить?

Не удается в фрагменте получить методы из интерфейса. Как это можно исправить?

Почему при попытки получить методы из интерфейса, пишет Cannot resolve method 'isProduct()' и Cannot resolve method 'getMenuTitle()'ourMenuItemsя прописываю как ArrayList

148