首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试使用msys2编译库时类型冲突

尝试使用msys2编译库时类型冲突
EN

Stack Overflow用户
提问于 2020-12-07 18:03:56
回答 1查看 262关注 0票数 1

我正在尝试在Windows/msys2下编译wcslib。虽然这个库在GNU/Linux和MacOS上编译时没有isue,但我在msys2上遇到了一个年复一年的问题:

代码语言:javascript
复制
wcs.h:1965:5: error: conflicting types for 'wcsset'
1965 | int wcsset(struct wcsprm *wcs);
| ^~~~~~
In file included from wcs.c:30:
C:/msys64/mingw64/x86_64-w64-mingw32/include/string.h:179:20: note: previous declaration of 'wcsset' was here
179 | wchar_t *__cdecl wcsset(wchar_t *_Str,wchar_t _Val) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
| ^~~~~~
wcs.c:2185:5: error: conflicting types for 'wcsset'
2185 | int wcsset(struct wcsprm *wcs)
| ^~~~~~
In file included from wcs.c:30:
C:/msys64/mingw64/x86_64-w64-mingw32/include/string.h:179:20: note: previous declaration of 'wcsset' was here
179 | wchar_t *__cdecl wcsset(wchar_t *_Str,wchar_t _Val) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
| ^~~~~~
make[3]: *** [GNUmakefile:135: libwcs-7.3.1.a(wcs.o)] Error 1
 
gcc -DHAVE_CONFIG_H -I. -I.. -g -O2 -c wcsbth.c
In file included from wcsbth.l:121: 
wcs.h:1965:5: error: conflicting types for 'wcsset'  
1965 | int wcsset(struct wcsprm *wcs);
| ^~~~~~
In file included from wcsbth.c:231:
C:/msys64/mingw64/x86_64-w64-mingw32/include/string.h:179:20: note: previous declaration of 'wcsset' was here
179 | wchar_t *__cdecl wcsset(wchar_t *_Str,wchar_t _Val) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
| ^~~~~~
make[3]: *** [GNUmakefile:135: libwcs-7.3.1.a(wcsbth.o)] Error 1

gcc -DHAVE_CONFIG_H -I. -I.. -g -O2 -c wcserr.c

gcc -DHAVE_CONFIG_H -I. -I.. -g -O2 -c wcsfix.c
In file included from wcsfix.c:38:
wcs.h:1965:5: error: conflicting types for 'wcsset'
1965 | int wcsset(struct wcsprm *wcs);
| ^~~~~~
In file included from wcsfix.c:30:
C:/msys64/mingw64/x86_64-w64-mingw32/include/string.h:179:20: note: previous declaration of 'wcsset' was here
179 | wchar_t *__cdecl wcsset(wchar_t *_Str,wchar_t _Val) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
| ^~~~~~
make[3]: *** [GNUmakefile:135: libwcs-7.3.1.a(wcsfix.o)] Error 1

gcc -DHAVE_CONFIG_H -I. -I.. -g -O2 -c wcshdr.c
In file included from wcshdr.h:1276,
from wcshdr.c:36:
wcs.h:1965:5: error: conflicting types for 'wcsset'
1965 | int wcsset(struct wcsprm *wcs);
| ^~~~~~
In file included from wcshdr.c:31:
C:/msys64/mingw64/x86_64-w64-mingw32/include/string.h:179:20: note: previous declaration of 'wcsset' was here
179 | wchar_t *__cdecl wcsset(wchar_t *_Str,wchar_t _Val) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
| ^~~~~~
make[3]: *** [GNUmakefile:135: libwcs-7.3.1.a(wcshdr.o)] Error 1

gcc -DHAVE_CONFIG_H -I. -I.. -g -O2 -c wcspih.c
In file included from wcspih.l:123:
wcs.h:1965:5: error: conflicting types for 'wcsset'
1965 | int wcsset(struct wcsprm *wcs);
| ^~~~~~
In file included from wcspih.c:231:
C:/msys64/mingw64/x86_64-w64-mingw32/include/string.h:179:20: note: previous declaration of 'wcsset' was here
179 | wchar_t *__cdecl wcsset(wchar_t *_Str,wchar_t _Val) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
| ^~~~~~
make[3]: *** [GNUmakefile:135: libwcs-7.3.1.a(wcspih.o)] Error 1

gcc -DHAVE_CONFIG_H -I. -I.. -g -O2 -c wcsprintf.c
gcc -DHAVE_CONFIG_H -I. -I.. -g -O2 -c wcstrig.c
gcc -DHAVE_CONFIG_H -I. -I.. -g -O2 -c wcsulex.c
gcc -DHAVE_CONFIG_H -I. -I.. -g -O2 -c wcsunits.c
gcc -DHAVE_CONFIG_H -I. -I.. -g -O2 -c wcsutil.c
gcc -DHAVE_CONFIG_H -I. -I.. -g -O2 -c wcsutrn.c
make[3]: Target 'libwcs-7.3.1.a' not remade because of errors.
make[2]: *** [GNUmakefile:258: lib] Error 2
make[2]: Target 'build' not remade because of errors.
make[2]: Leaving directory '/home/siril/wcslib-7.3.1/C'
Mon 2020/12/07 09:23:14 +0100, executing on
make[2]: Entering directory '/home/siril/wcslib-7.3.1/utils'
cd .. && ./config.status
config.status: creating makedefs
config.status: creating wcslib.pc
config.status: creating wcsconfig.h
config.status: creating wcsconfig_f77.h
config.status: wcsconfig_f77.h is unchanged
config.status: creating wcsconfig_tests.h
config.status: wcsconfig_tests.h is unchanged
config.status: creating wcsconfig_utils.h
 
gcc -DHAVE_CONFIG_H -I.. -I../C -g -O2 -c -o fitshdr.o fitshdr.c   
gcc -o fitshdr fitshdr.o -lm -pthread -lcurl -lm  
make[2]: Leaving directory '/home/siril/wcslib-7.3.1/utils'
make[1]: Leaving directory '/home/siril/wcslib-7.3.1'

当然,更改lib函数的名称不是一个选项(至少不是我的选项)。有没有人知道摆脱它的好办法。例如移除符号的方法或者..。一些其他的东西。

EN

回答 1

Stack Overflow用户

发布于 2020-12-08 02:55:29

我查看了您的错误消息中提到的string.h文件。看起来您可以定义一个预处理器宏NO_OLDNAMES来告诉头文件不要为wcsset生成原型。

您仍然需要注意链接时的问题,但这可能就足够了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65179621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档