使用 Magick++ 和 openMPI 编译 C++ 代码
Compile c++ code using Magick++ and openMPI
我正在尝试使用 Magick++
库编译我的 C++ 代码,以使用 openMPI
以分布式方式操作图像,但在尝试编译时出现一些错误。
这是我的代码:
#include "mpi.h"
#include <stdio.h>
#include <iostream>
#include <Magick++.h>
using namespace std;
using namespace Magick;
int main(int argc, char **argv){
int rank, numtask;
InitializeMagick(*argv);
Image image;
try {
// Read a file into image object
image.read( "test_image.jpg" );
image.type( GrayscaleType );
Blob blob;
image.magick( "JPEG" ); // Set JPEG output format
image.write( &blob );
}
catch( Exception &error_ ){
cout << "Caught exception: " << error_.what() << endl;
return 1;
}
//Now in the "distributed enviroment" I just print an hello world to test it.
MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &numtask);
cout<<"HelloWorld\n";
MPI_Finalize();
}
这是我在 shell
上键入的命令
mpiCC openmpi_project.cc -o openmpi_project
这是shell
的输出
openmpi_project.cc:(.text+0x1d): undefined reference to
"Magick::InitializeMagick(char const*)"
openmpi_project.cc:(.text+0x29): undefined reference to
"Magick::Image::Image()"
openmpi_project.cc:(.text+0x5d): undefined reference to
"Magick::Image::read(std::string const&)"
openmpi_project.cc:(.text+0x86): undefined reference to
"Magick::Image::type(MagickCore::ImageType)"
openmpi_project.cc:(.text+0x92): rundefined reference to
"Magick::Blob::Blob()"
openmpi_project.cc:(.text+0xc6): undefined reference to
"Magick::Image::magick(std::string const&)"
openmpi_project.cc:(.text+0xf1): undefined reference to
"Magick::Image::write(Magick::Blob*)"
openmpi_project.cc:(.text+0xfd): undefined reference to
"Magick::Blob::~Blob()"
openmpi_project.cc:(.text+0x158): undefined reference to
"Magick::Image::~Image()"
openmpi_project.cc:(.text+0x1d3): undefined reference to
"Magick::Blob::~Blob()"
openmpi_project.cc:(.text+0x261): undefined reference to
"Magick::Image::~Image()"
/tmp/ccqFzUdy.o:(.gcc_except_table+0x58): undefined reference to
"typeinfo for Magick::Exception"
ImageMagick 附带配置实用程序。对于 Magick++,此实用程序是 Magick++-config
。请参阅 the API docs 下的 用法 小节。
LDFLAGS=$(Magick++-config --ldflags)
CXXFLAGS=$(Magick++-config --cxxflags)
$(CC) $CXXFLAGS openmpi_project.cc $LDFLAGS -o openmpi_project
跳转到 MPI compiling/linking docs,并将 Magick++ 的附加标志集成到 mpiCC
LDFLAGS=$(Magick++-config --ldflags)
CXXFLAGS=$(Magick++-config --cxxflags)
mpiCC --with-wrapper-cxxflags=$CXXFLAGS openmpi_project.cc \
--with-wrapper-ldflags=$LDFLAGS -o openmpi_project
我正在尝试使用 Magick++
库编译我的 C++ 代码,以使用 openMPI
以分布式方式操作图像,但在尝试编译时出现一些错误。
这是我的代码:
#include "mpi.h"
#include <stdio.h>
#include <iostream>
#include <Magick++.h>
using namespace std;
using namespace Magick;
int main(int argc, char **argv){
int rank, numtask;
InitializeMagick(*argv);
Image image;
try {
// Read a file into image object
image.read( "test_image.jpg" );
image.type( GrayscaleType );
Blob blob;
image.magick( "JPEG" ); // Set JPEG output format
image.write( &blob );
}
catch( Exception &error_ ){
cout << "Caught exception: " << error_.what() << endl;
return 1;
}
//Now in the "distributed enviroment" I just print an hello world to test it.
MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &numtask);
cout<<"HelloWorld\n";
MPI_Finalize();
}
这是我在 shell
上键入的命令mpiCC openmpi_project.cc -o openmpi_project
这是shell
的输出openmpi_project.cc:(.text+0x1d): undefined reference to "Magick::InitializeMagick(char const*)"
openmpi_project.cc:(.text+0x29): undefined reference to "Magick::Image::Image()"
openmpi_project.cc:(.text+0x5d): undefined reference to "Magick::Image::read(std::string const&)"
openmpi_project.cc:(.text+0x86): undefined reference to "Magick::Image::type(MagickCore::ImageType)"
openmpi_project.cc:(.text+0x92): rundefined reference to "Magick::Blob::Blob()"
openmpi_project.cc:(.text+0xc6): undefined reference to "Magick::Image::magick(std::string const&)"
openmpi_project.cc:(.text+0xf1): undefined reference to "Magick::Image::write(Magick::Blob*)"
openmpi_project.cc:(.text+0xfd): undefined reference to "Magick::Blob::~Blob()"
openmpi_project.cc:(.text+0x158): undefined reference to "Magick::Image::~Image()"
openmpi_project.cc:(.text+0x1d3): undefined reference to "Magick::Blob::~Blob()"
openmpi_project.cc:(.text+0x261): undefined reference to "Magick::Image::~Image()"
/tmp/ccqFzUdy.o:(.gcc_except_table+0x58): undefined reference to "typeinfo for Magick::Exception"
ImageMagick 附带配置实用程序。对于 Magick++,此实用程序是 Magick++-config
。请参阅 the API docs 下的 用法 小节。
LDFLAGS=$(Magick++-config --ldflags)
CXXFLAGS=$(Magick++-config --cxxflags)
$(CC) $CXXFLAGS openmpi_project.cc $LDFLAGS -o openmpi_project
跳转到 MPI compiling/linking docs,并将 Magick++ 的附加标志集成到 mpiCC
LDFLAGS=$(Magick++-config --ldflags)
CXXFLAGS=$(Magick++-config --cxxflags)
mpiCC --with-wrapper-cxxflags=$CXXFLAGS openmpi_project.cc \
--with-wrapper-ldflags=$LDFLAGS -o openmpi_project