Как мне исправить сборку для mod_mono, если он не может найти strndup во FreeBSD?

Я устанавливаю mod_mono с Apache 2 на FreeBSD и получаю следующую ошибку, когда Apache пытается загрузить модуль mod_mono.so.

Невозможно загрузить /usr/local/apache/modules/mod_mono.so на сервер: /usr/local/apache/modules/mod_mono.so: неопределенный символ "strndup"

Я установил для Apache префикс / usr / local / apache, и у меня уже работают PHP и другие модули. Я обнаружил, что на strndup есть ссылка в roken.h в / usr / include, и я попробовал следующие дополнения для команды configure, но это не сработало.

--libdir = / usr / lib --includedir = / usr / include

Я тоже пробовал ...

--with-mono-prefix = / usr

Не знаю, что попробовать дальше. Не похоже, что у mod_mono много вариантов сборки. Поскольку и Mono, и XSP созданы успешно, мне просто нужно, чтобы mod_mono работал.

Я ценю любые советы, чтобы заставить это работать.


person Brennan    schedule 03.03.2010    source источник


Ответы (1)


Добавьте strndup, реализовав его:

ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#if !_LIBC
# include "strndup.h"
#endif

#include <stdlib.h>
#include <string.h>

#if !_LIBC
# include "strnlen.h"
# ifndef __strnlen
#  define __strnlen strnlen
# endif
#endif

#undef __strndup
#if _LIBC
# undef strndup
#endif

#ifndef weak_alias
# define __strndup strndup
#endif

char *
__strndup (s, n)
     const char *s;
     size_t n;
{
  size_t len = __strnlen (s, n);
  char *new = malloc (len + 1);

  if (new == NULL)
    return NULL;

  new[len] = '\0';
  return memcpy (new, s, len);
}
#ifdef libc_hidden_def
libc_hidden_def (__strndup)
#endif
#ifdef weak_alias
weak_alias (__strndup, strndup)
#endif
person Stefan Steiger    schedule 19.10.2010