Как мне создать .so файл, который содержит только код C ++, завернутый в код C - связанный с OpenCV?

0

На 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 находятся в том, что я делаю неправильно?.... любая помощь == сильно оценена =)

Теги:
opencv
wrapper

1 ответ

0
Лучший ответ

Ваш параметр -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.

  • 1
    Большое спасибо ... g ++ -Wall -shared -fPIC -o opencv_generated.so opencv_generated.cpp работал

Ещё вопросы

Сообщество Overcoder
Наверх
Меню