На Ubuntu Saucy 64 бит в терминале с использованием g++ Im пытается обернуть OpenCV на языке без сильного C++ ffi, поэтому я пытаюсь использовать обложки C++ для C, чтобы помочь в этом... Вот небольшой фрагмент файлы Im, пытающиеся конвертировать только для того, чтобы почувствовать это (opencv_generated.hpp и opencv_generated.cpp по этой ссылке https://github.com/arjuncomar/opencv-raw)
opencv_generated hpp:
#include <opencv2/opencv.hpp>
#include <vector>
#ifndef __OPENCV_GENERATED_HPP
#define __OPENCV_GENERATED_HPP
using namespace cv;
using namespace std;
using namespace flann;
using namespace cvflann;
extern "C" {
Mat* cv_imread(String* filename, int flags);
void cv_imshow(String* winname, Mat* mat);
bool cv_imwrite(String* filename, Mat* img, vector_int* params);}
opencv_generated.cpp:
#include "opencv_generated.hpp"
using namespace cv;
using namespace std;
using namespace flann;
using namespace cvflann;
extern "C" {
Mat* cv_imread(String* filename, int flags) {
return new Mat(cv::imread(*filename, flags));
}
void cv_imshow(String* winname, Mat* mat) {
cv::imshow(*winname, *mat);
}
bool cv_imwrite(String* filename, Mat* img, vector_int* params) {
return cv::imwrite(*filename, *img, *params);
}}
Я новичок в C-оболочках для C++ и пытаюсь скомпилировать
g++ -Wall -dynamiclib -I/home/w/test/opencv_generated.hpp
-I/home/w/test/opencv_generated.cpp -o test.so
im получение ошибки:
g++: fatal error: no input files
... im в каталоге мои файлы opencv_generated.cpp и opencv_generated.hpp находятся в том, что я делаю неправильно?.... любая помощь == сильно оценена =)
Ваш параметр -I
для компилятора должен быть только путь к каталогу, который вы хотите включить, а не обязательно к файлу. Кроме того, ваш второй параметр -I
кажется, является исходным файлом, который вы хотите скомпилировать, поэтому вам не нужно было бы предшествовать этому ни с чем. Если вы находитесь в том же каталоге, что и два файла.hpp и.cpp, вам также не нужно указывать каталог include для файла opencv_generated.hpp - вы можете просто скомпилировать следующую команду:
g++ -Wall -shared -fPIC -o libTest.so opencv_generated.cpp
Если вы находитесь в другом каталоге и/или ваши исходные файлы + заголовки разбросаны вокруг, тем не менее, вам, вероятно, придется скомпилировать ваш источник с абсолютными путями, как вы первоначально разместили:
g++ -Wall -shared -fPIC -o libTest.so -I/home/w/test/ /home/w/test/opencv_generated.cpp
Кроме того, если вы связывали другую программу, которую вы написали (скажем, main.cpp) против этой общей библиотеки и находились в том же каталоге, в котором она была, вы должны запустить:
g++ -Wall main.cpp -L/home/w/test/ -lTest
Где /home/w/test/
содержит файл libTest.so
. По умолчанию компилятор будет искать ваш файл libTest.so
в текущем пути библиотеки при указании -lTest
и не будет найден, поэтому -L
параметр -L
.