Неопределенные ссылки в пользовательском модуле Apache - PullRequest
0 голосов
/ 24 января 2019

У меня есть некоторые неопределенные ошибки ссылок в модуле Apache. Я сократил исходный код до минимума, который воспроизвел ошибку. Ниже приведен источник для "mod_test.c" ...

#include "httpd.h"
#include "http_config.h"
#include "http_request.h"
#include "http_protocol.h"
#include "http_core.h"
#include "http_main.h"
#include "http_log.h"
#include "ap_mpm.h"
#include "apr_strings.h"
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <arpa/inet.h>
#include <netdb.h>

module AP_MODULE_DECLARE_DATA test_module;

static int test_handler(request_rec *r);
static int test_init(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s);

/* Structure containing state information for the module */

typedef struct {
} ns_mod_config;


static int ns_typematch(request_rec *r) {

  ns_mod_config *ns_scfg = ap_get_module_config(r->server->module_config,
                                          &test_module);

  core_request_config *creq_cfg;
  creq_cfg = ap_get_core_module_config(r->request_config);

  return 0;
}


module AP_MODULE_DECLARE_DATA test_module = {
        STANDARD20_MODULE_STUFF,NULL,NULL,NULL,NULL,NULL,NULL};

Я использую более или менее стандартный Makefile для компиляции модуля (обратите внимание, что опция установки была удалена, так как это тест для демонстрации проблемы.)

APXS=/usr/local/apache2/bin/apxs
APXS_OPTS=-Wc, -Wc,-DDST_CLASS=3
SRC=src/mod_test.c
OBJ=src/.libs/mod_test.so

$(OBJ): $(SRC)
        @echo
        $(APXS) $(APXS_OPTS) -c $(SRC)
        @echo
        @echo write '"make install"' to install module
        @echo

clean:
        rm -f src/.libs/*
        rm -f src/*.o
        rm -f src/*.lo
        rm -f src/*.la
        rm -f src/*.slo
        rmdir src/.libs

Компиляция завершается следующим образом:

/usr/local/apache2/bin/apxs -Wc, -Wc,-DDST_CLASS=3 -c src/mod_test.c
/usr/local/apache2/build/libtool --silent --mode=compile gcc -prefer-pic   -DLINUX -D_REENTRANT -D_GNU_SOURCE -D_LARGEFILE64_SOURCE -g -O2 -pthread -I/usr/local/apache2/include  -I/usr/local/apache2/include   -I/usr/local/apache2/include   -DDST_CLASS=3  -c -o src/mod_test.lo src/mod_test.c && touch src/mod_test.slo
src/mod_test.c: In function âns_typematchâ:
src/mod_test.c:34:3: error: unknown type name âcore_request_configâ
   core_request_config *creq_cfg;
   ^~~~~~~~~~~~~~~~~~~
src/mod_test.c:35:14: warning: implicit declaration of function âap_get_core_module_configâ [-Wimplicit-function-declaration]
   creq_cfg = ap_get_core_module_config(r->request_config);
              ^~~~~~~~~~~~~~~~~~~~~~~~~
src/mod_test.c:35:12: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
   creq_cfg = ap_get_core_module_config(r->request_config);
            ^
apxs:Error: Command failed with rc=65536
.
Makefile:23: recipe for target 'src/.libs/mod_test.so' failed
make: *** [src/.libs/mod_test.so] Error 1

Я не уверен, как это может произойти. http_core.h присутствует в / usr / local / apache2 / include и содержит определения, которые, как утверждается, отсутствуют при компиляции. Шесть других модулей в той же системе компилируются без ошибок, хотя ни один из них не использует эту конкретную ссылку на основные структуры данных.

Помощь будет с благодарностью получена.

1 Ответ

0 голосов
/ 28 января 2019

После публикации в списке рассылки модулей Apache выясняется, что проблема состоит из двух частей.

  1. Для доступа к основным структурам данных в Apache 2.2 требуется определение CORE_PRIVATE.

  2. ap_get_core_module_config - это конструкция Apache 2.4.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...