1

私は C++ で小さなプログラムを書きましたが、C で PHP 拡張機能に取り組んでいるので、単に C でラップしようとしています。一般的には問題ないようです。基本は機能します。C++ で簡単なプログラムを作成し、extern "C"問題なく使用できます。

しかし、私は OpenCV も使用しており、 などのオブジェクトを宣言すると問題が発生するようSurfFeatureDetectorです。

これが私の C 拡張 Hello World の出発点です。

#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include "php.h"
#include "php_framework.h"
#include "cvlink.h"

static function_entry framework_functions[] = {
    PHP_FE(test, NULL)
    {NULL, NULL, NULL}
};

zend_module_entry framework_module_entry = {
#if ZEND_MODULE_API_NO >= 20010901
    STANDARD_MODULE_HEADER,
#endif
    PHP_FRAMEWORK_EXTNAME,
    framework_functions,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
#if ZEND_MODULE_API_NO >= 20010901
    PHP_FRAMEWORK_VERSION,
#endif
    STANDARD_MODULE_PROPERTIES
};

#ifdef COMPILE_DL_FRAMEWORK
ZEND_GET_MODULE(framework)
#endif

PHP_FUNCTION(test)
{
    RETURN_STRING("Hello World", 1);
}

ここでは、実際にcvlink.h一番上に引っ張っています。そのヘッダーのソース ファイルは次のようになります。

#include "cvlink.h"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/calib3d/calib3d.hpp"

using namespace cv;

extern "C" int process_two_images(const char* first_img_path, const char* second_img_path)
{
    Mat object_1 = imread(first_img_path, CV_LOAD_IMAGE_GRAYSCALE);
    Mat object_2 = imread(second_img_path, CV_LOAD_IMAGE_GRAYSCALE);

    return 0;
}

これはすべて正常に動作するためprocess_two_images、C ファイルで を呼び出すと、正常に動作します。しかし、... 行の次の行は次のMat object_1ようになります。

SurfFeatureDetector detector(500);

それでも、コンパイルに関してはすべて問題ありません。しかし、testここで作成した PHP 関数を呼び出すと、宣言されていない関数エラーが発生します。

変。私が行方不明になっているのはおそらく本当に明白なことですが、何がわかりません。

4

0 に答える 0