gpt4 book ai didi

编译C程序 : Dynamical type definition leads to errors

转载 作者:太空宇宙 更新时间:2023-11-04 03:47:28 24 4
gpt4 key购买 nike

最近几天我用 C 写了一个 dovecot 插件。我的源代码本身似乎很好,但我目前想知道如何编译它或如何拥有一个更动态的 Makefile。

问题是,每当我尝试编译时,都会收到错误消息 Error: unknown type name: »uoff_t«

问题是,这种类型是在一个引用库中以这种方式定义的:

#if defined (HAVE_UOFF_T)
/* native support */
#elif defined (UOFF_T_INT)
typedef unsigned int uoff_t;
#elif defined (UOFF_T_LONG)
typedef unsigned long uoff_t;
#elif defined (UOFF_T_LONG_LONG)
typedef unsigned long long uoff_t;
#else
# error uoff_t size not set
#endif

在 dovecot 的 Autoconf 中,这些变量是基于另一种类型设置的:

AC_CHECK_TYPE(uoff_t, [
have_uoff_t=yes
AC_DEFINE(HAVE_UOFF_T,, Define if you have a native uoff_t type)
], [
have_uoff_t=no
])

AC_TYPEOF(off_t, long int long-long)
case "$typeof_off_t" in
int)
offt_max=INT_MAX
uofft_fmt="u"
if test "$have_uoff_t" != "yes"; then
AC_DEFINE(UOFF_T_INT,, Define if off_t is int)
fi
offt_bits=`expr 8 \* $ac_cv_sizeof_int`
;;
long)
offt_max=LONG_MAX
uofft_fmt="lu"
if test "$have_uoff_t" != "yes"; then
AC_DEFINE(UOFF_T_LONG,, Define if off_t is long)
fi
offt_bits=`expr 8 \* $ac_cv_sizeof_long`
;;
"long long")
offt_max=LLONG_MAX
uofft_fmt="llu"
if test "$have_uoff_t" != "yes"; then
AC_DEFINE(UOFF_T_LONG_LONG,, Define if off_t is long long)
fi
offt_bits=`expr 8 \* $ac_cv_sizeof_long_long`
;;
*)
AC_MSG_ERROR([Unsupported off_t type])
;;
esac

所以毕竟我的问题是,我是否可以在不使用 Automake 的情况下以等效的方式在我的 Makefile 中拥有这些东西。

我的目标是检查 uoff_t 是否已经在某处定义(对于 HAVE_UOFF_T)或者类型 off_t 是如何定义的(对于其他参数)。有任何想法,还是我遗漏了什么?

提前致谢!

最佳答案

显然,我尝试做的事情似乎是不可能的。我最终深入研究了 autoconf 并重用了 dovecot 的通用定义。

谢谢!

干杯

关于编译C程序 : Dynamical type definition leads to errors,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23158378/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com