[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
redefinition errors on MSVC
From: |
Bruno Haible |
Subject: |
redefinition errors on MSVC |
Date: |
Sat, 17 Dec 2016 23:10:18 +0100 |
User-agent: |
KMail/4.8.5 (Linux/3.8.0-44-generic; KDE/4.8.5; x86_64; ; ) |
Compiling a gnulib testdir with MSVC 14, I get these errors:
/home/bruno/msvc/compile cl -nologo -DHAVE_CONFIG_H -DEXEEXT=\".exe\" -I.
-I../../gltests -I.. -DGNULIB_STRICT_CHECKING=1 -DIN_GNULIB_TESTS=1 -I.
-I../../gltests -I.. -I../../gltests/.. -I../gllib -I../../gltests/../gllib
-D_WIN32_WINNT=_WIN32_WINNT_WINXP -I/usr/local/msvc32/include -MD -c -o
test-binary-io.obj `cygpath -w '../../gltests/test-binary-io.c'`
test-binary-io.c
C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\stdio.h(380):
error C2375: 'rpl_unlink': redefinition; different linkage
../gllib\unistd.h(1849): note: see declaration of 'rpl_unlink'
make[4]: *** [Makefile:8027: test-binary-io.obj] Error 2
/home/bruno/msvc/compile cl -nologo -DHAVE_CONFIG_H -DEXEEXT=\".exe\" -I.
-I../../gltests -I.. -DGNULIB_STRICT_CHECKING=1 -DIN_GNULIB_TESTS=1 -I.
-I../../gltests -I.. -I../../gltests/.. -I../gllib -I../../gltests/../gllib
-D_WIN32_WINNT=_WIN32_WINNT_WINXP -I/usr/local/msvc32/include -MD -c -o
test-dprintf-posix2.obj `cygpath -w '../../gltests/test-dprintf-posix2.c'`
test-dprintf-posix2.c
C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\stdlib.h(230):
error C2375: 'rpl_perror': redefinition; different linkage
../gllib\stdio.h(1160): note: see declaration of 'rpl_perror'
C:\Program Files (x86)\Windows
Kits\10\Include\10.0.10240.0\ucrt\corecrt_io.h(254): error C2375: 'rpl_remove':
redefinition; different linkage
../gllib\stdio.h(1296): note: see declaration of 'rpl_remove'
C:\Program Files (x86)\Windows
Kits\10\Include\10.0.10240.0\ucrt\corecrt_io.h(259): error C2375: 'rpl_rename':
redefinition; different linkage
../gllib\stdio.h(1317): note: see declaration of 'rpl_rename'
make[4]: *** [Makefile:8027: test-dprintf-posix2.obj] Error 2
This fixes it.
2016-12-17 Bruno Haible <address@hidden>
Avoid redefinition errors on MSVC.
* lib/stdio.in.h: Include <stdlib.h> and <io.h> when necessary.
* lib/unistd.in.h: Include <stdio.h> when necessary.
diff --git a/lib/stdio.in.h b/lib/stdio.in.h
index 4a6e9ff..fff16a5 100644
--- a/lib/stdio.in.h
+++ b/lib/stdio.in.h
@@ -118,6 +118,26 @@
# include <unistd.h>
#endif
+/* MSVC declares 'perror' in <stdlib.h>, not in <stdio.h>. We must include
+ it before we #define perror rpl_perror. */
+/* But in any case avoid namespace pollution on glibc systems. */
+#if (@GNULIB_PERROR@ || defined GNULIB_POSIXCHECK) \
+ && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) \
+ && ! defined __GLIBC__
+# include <stdlib.h>
+#endif
+
+/* MSVC declares 'remove' in <io.h>, not in <stdio.h>. We must include
+ it before we #define remove rpl_remove. */
+/* MSVC declares 'rename' in <io.h>, not in <stdio.h>. We must include
+ it before we #define rename rpl_rename. */
+/* But in any case avoid namespace pollution on glibc systems. */
+#if (@GNULIB_REMOVE@ || @GNULIB_RENAME@ || defined GNULIB_POSIXCHECK) \
+ && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) \
+ && ! defined __GLIBC__
+# include <io.h>
+#endif
+
/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */
diff --git a/lib/unistd.in.h b/lib/unistd.in.h
index 686eb81..e7e977c 100644
--- a/lib/unistd.in.h
+++ b/lib/unistd.in.h
@@ -55,9 +55,13 @@
#include <stddef.h>
/* mingw doesn't define the SEEK_* or *_FILENO macros in <unistd.h>. */
+/* MSVC declares 'unlink' in <stdio.h>, not in <unistd.h>. We must include
+ it before we #define unlink rpl_unlink. */
/* Cygwin 1.7.1 declares symlinkat in <stdio.h>, not in <unistd.h>. */
/* But avoid namespace pollution on glibc systems. */
#if (!(defined SEEK_CUR && defined SEEK_END && defined SEEK_SET) \
+ || ((@GNULIB_UNLINK@ || defined GNULIB_POSIXCHECK) \
+ && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)) \
|| ((@GNULIB_SYMLINKAT@ || defined GNULIB_POSIXCHECK) \
&& defined __CYGWIN__)) \
&& ! defined __GLIBC__
--
2.6.4
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- redefinition errors on MSVC,
Bruno Haible <=