1

私はLinuxMint13を使用しており、「Unixネットワークプログラミング:プロセス間通信」という本を勉強しています。この本のソースコード(http://www.kohala.com/start/unpv22e/unpv22e.html )をダウンロードし、指示に従いました。

まず、ベースディレクトリで./configureを実行しました

次に、libディレクトリに移動してmakeを実行しました。これにより、次のエラーが発生します-

gcc -c  "/home/linux/Code/c/unix_network_programming/main.c" -g  -o ./Debug/main.o "-I." "-I." 
In file included from /usr/lib/gcc/i686-linux-gnu/4.6/include/stdint.h:3:0,
                 from /usr/include/netinet/in.h:24,
                 from /usr/include/rpc/types.h:91,
                 from /usr/include/rpc/rpc.h:38,
                 from /home/linux/Code/c/unix_network_programming/unpipc.h:115,
                 from /home/linux/Code/c/unix_network_programming/main.c:2:
/usr/include/stdint.h:49:24: error: duplicate ‘unsigned’
/usr/include/stdint.h:49:24: error: two or more data types in declaration specifiers
/usr/include/stdint.h:50:28: error: duplicate ‘unsigned’
/usr/include/stdint.h:50:28: error: duplicate ‘short’
/usr/include/stdint.h:52:23: error: duplicate ‘unsigned’
/usr/include/stdint.h:52:23: error: two or more data types in declaration specifiers

これがエラーを出しているファイルです-

#ifndef _GCC_WRAP_STDINT_H
#if __STDC_HOSTED__
# include_next <stdint.h>
#else
# include "stdint-gcc.h"
#endif
#define _GCC_WRAP_STDINT_H
#endif

私はCの経験がほとんどないので、このエラーを修正する方法について何かアイデアはありますか?

4

2 に答える 2

1

次のやや厄介なパッチを適用します。

diff -U 3 ./aclocal.m4 ./aclocal.m4
--- ./aclocal.m4       1997-10-10 22:45:46.000000000 +0100
+++ ./aclocal.m4        2013-03-25 17:35:22.287397177 +0000
@@ -31,6 +31,7 @@
                AC_TRY_COMPILE(
 [
 #include       "confdefs.h"    /* the header built by configure so far */
+#include <stdint.h>
 #ifdef HAVE_SYS_TYPES_H
 #  include     <sys/types.h>
 #endif
diff -U 3 ../unpv22e/config.h.in ./config.h.in
--- ./config.h.in      1998-06-10 18:26:41.000000000 +0100
+++ ./config.h.in       2013-03-25 17:42:18.788139903 +0000
@@ -2,6 +2,7 @@
 #undef CPU_VENDOR_OS

 /* *INDENT-OFF* */
+#undef HAVE_STDINT_H
 #undef HAVE_DOOR_H                             /* <door.h> */
 #undef HAVE_MQUEUE_H                           /* <mqueue.h> */
 #undef HAVE_POLL_H                             /* <poll.h> */
@@ -49,6 +50,9 @@
 #undef HAVE_DEV_ZERO

 /* Define the following to the appropriate datatype, if necessary */
+#ifdef HAVE_STDINT_H
+#include <stdint.h>
+#endif
 #undef int8_t                          /* <sys/types.h> */
 #undef int16_t                         /* <sys/types.h> */
 #undef int32_t                         /* <sys/types.h> */
diff -U 3 ../unpv22e/configure.in ./configure.in
--- ./configure.in     1998-06-06 22:42:29.000000000 +0100
+++ ./configure.in      2013-03-25 17:38:14.555324559 +0000
@@ -105,7 +105,7 @@
 dnl but used in "lib/wrapunix.c".
 dnl
 AC_HEADER_STDC
-AC_CHECK_HEADERS(sys/types.h sys/time.h time.h errno.h fcntl.h limits.h signal.h stdio.h stdlib.h string.h sys/stat.h unistd.h sys/wait.h sys/ipc.h sys/msg.h sys/sem.h sys/shm.h mqueue.h semaphore.h sys/mman.h sys/select.h poll.h stropts.h strings.h sys/ioctl.h sys/filio.h pthread.h door.h rpc/rpc.h sys/sysctl.h)
+AC_CHECK_HEADERS(stdint.h sys/types.h sys/time.h time.h errno.h fcntl.h limits.h signal.h stdio.h stdlib.h string.h sys/stat.h unistd.h sys/wait.h sys/ipc.h sys/msg.h sys/sem.h sys/shm.h mqueue.h semaphore.h sys/mman.h sys/select.h poll.h stropts.h strings.h sys/ioctl.h sys/filio.h pthread.h door.h rpc/rpc.h sys/sysctl.h)

 dnl ##################################################################
 dnl Checks for typedefs.

次に、autoconfを実行し(新しいバージョンではなくautoconf2.13を使用)、config.cacheを削除して、再試行します。

于 2013-03-25T17:48:25.783 に答える
1

config.hでこれらの行をコメントアウトするだけです(./configure最初 に実行してください)。

#define uint8_t unsigned char         /* <sys/types.h> */
#define uint16_t unsigned short       /* <sys/types.h> */
#define uint32_t unsigned int         /* <sys/types.h> */

わたしにはできる:)。

于 2013-10-25T05:14:22.973 に答える