当 mod_mono 在 FreeBSD 上找不到 strndup 时,如何修复 mod_mono 的构建?

发布于 2024-08-23 16:08:38 字数 622 浏览 7 评论 0原文

我正在 FreeBSD 上使用 Apache 2 安装 mod_mono,当 Apache 尝试加载 mod_mono.so 模块时,出现以下错误。

无法加载 /usr/local/apache/modules/mod_mono.so 进入服务器: /usr/local/apache/modules/mod_mono.so: 未定义的符号“strndup”

我为 Apache 设置的前缀是 /usr/local/apache,并且 PHP 和其他模块已经在工作了。我发现 /usr/include 中的 roken.h 引用了 strndup,我尝试了以下添加来配置命令,但它不起作用。

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

我也尝试过...

--with-mono-prefix=/usr

我不知道接下来要尝试什么。 mod_mono 似乎没有很多构建选项。由于 Mono 和 XSP 都已成功构建,我只需要 mod_mono 即可工作。

我很感激任何让它发挥作用的提示。

I am installing mod_mono with Apache 2 on FreeBSD and I get the following error when Apache tries to load the mod_mono.so module.

Cannot load
/usr/local/apache/modules/mod_mono.so
into server:
/usr/local/apache/modules/mod_mono.so:
Undefined symbol "strndup"

The prefix I set for Apache is /usr/local/apache and I have PHP and other modules working already. I found that strndup is referenced in roken.h in /usr/include and I tried the following additions to configure command but it did not work.

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

I also tried...

--with-mono-prefix=/usr

I do not know what to try next. It does not appear that mod_mono has many build options. Since Mono and XSP are both built successfully I just need mod_mono to work.

I appreciate any tips to get this working.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一影成城 2024-08-30 16:08:38

通过实现添加 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

Add strndup via implementing it:

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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文