在C ++程序中包含C函数和头文件

时间:2014-09-03 03:06:10

标签: c++ c xcode apache module

我正在尝试用C ++构建一个apache模块,我想我只是遗漏了一些东西。我正在运行XCode 5.1,OSX 10.9。我已经成功构建了Apache 2.4并拥有所有的libs / headers等。我已经使用C,apxs和前面提到的libs / headers成功编译了几个模块。我读过关于外部“C”的内容,我相信我理解这一点。那么,为什么当我尝试编译我的C ++模块(没有关于未知/缺少标题的抱怨)时,我会得到未定义符号的链接器错误。我是否遗漏了从C ++文件中定义的C函数内部调用C函数的错误?我使用本教程作为参考: http://www.codeproject.com/Articles/491909/Apache-x-Modules-In-Cplusplus-Part

如果我取出ap_ * funcs,它编译得很好。我也试过在extern“C”中包装我的包含,但没有运气。另外,我用C语言成功尝试用apxs编译,在这里我想用XCode编译.so并通过apxs安装。是什么给了什么?

感谢。

这是我的代码:

//
//  mod_mm2.h
//  mod_mm2
//
//  Created by Tony Stark on 9/2/14.
//  Copyright (c) 2014 Tony Stark. All rights reserved.
//

#ifndef __mod_mm2__mod_mm2__
#define __mod_mm2__mod_mm2__

#ifdef __cplusplus
#define EXTERN_C_BLOCK_BEGIN    extern "C" {
#define EXTERN_C_BLOCK_END      }
#define EXTERN_C_FUNC           extern "C"
#else
#define EXTERN_C_BLOCK_BEGIN
#define EXTERN_C_BLOCK_END
#define EXTERN_C_FUNC
#endif


#include <httpd.h>
#include <http_protocol.h>
#include <http_config.h>

#endif /* defined(__mod_mm2__mod_mm2__) */

和cpp

#include "mod_mm2.h"



EXTERN_C_FUNC int mm2_handler(request_rec *r)
{

    /* Do we want to handle this request? */
    if (!r->handler || strcmp(r->handler, "mm2_module") != 0) {

        /* No */
        return DECLINED;
    }

    /* Is this a method we accept? */
    if (r->method_number != M_GET) {

        /* No. */
        return HTTP_METHOD_NOT_ALLOWED;
    }


    ap_set_content_type(r, "text/html");

    ap_rputs("<h1>Handler working</h1>", r);

    return OK;


};



EXTERN_C_FUNC void mm2_hooks(apr_pool_t *pool)
{

    ap_hook_handler(mm2_handler, NULL, NULL, APR_HOOK_FIRST);
};



EXTERN_C_BLOCK_BEGIN
module AP_DECLARE_DATA mm2_module = {

    STANDARD20_MODULE_STUFF,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    mm2_hooks
};
EXTERN_C_BLOCK_END

0 个答案:

没有答案