1

我已经用 C++ 编写了一个小程序,我只是想用 C 来包装它,因为我正在用 C 编写 PHP 扩展。通常情况看起来还不错。基础工作,我可以用 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