如何解决“特定于格式的未知转换类型字符'z'”特定于编译器的警告?

问题描述 投票:2回答:1

我正在处理交叉编译到几种目标体系结构的代码。

我从堆栈溢出中搜索“ printf size_t未知转换类型字符”警告时查看了handfulofhits,但是这些帖子似乎都与minGW有关,所以这些答案本质上是[C0对ifdef而言,不适用于我所遇到的本质上相同的问题,即_WIN32不能将“ printf”识别为%zu的格式说明符,而是使用size_t交叉编译器。 >

是否有一个现有的编译器标记(用于指定的交叉编译器),使libc能够识别“%zu”作为mips的格式说明符?

size_t

如果对粗体问题的直接回答是“否”,还有什么其他可能的解决方案?我想到的可能性是...

  1. $ cat ./main.c // main.c #include <stdio.h> int main( int argc, char* argv[] ) { size_t i = 42; printf( "%zu\n", i ); return 0; } $ /path/to/mips_fp_le-gcc --version 2.95.3 $ $ file /path/to/libc.so.6 /path/to/libc.so.6: ELF 32-bit LSB pie executable, MIPS, MIPS-I version 1 (SYSV), dynamically linked, interpreter /lib/ld.so.1, for GNU/Linux 2.2.15, not stripped, too many notes (256) $ $ /path/to/mips_fp_le-gcc -mips2 -O2 -EL -DEL -pipe -Wall -Wa,-non_shared -DCPU=SPARC -DLINUX -D_REENTRANT -DPROCESS_AUID -DTAGGING -fPIC -I. -I../../../root/include -I../include -I../../../common/include -I../../.. /root/include -DDISABLE_CSL_BITE -DDISABLE_DNS_LOOKUP -DOS=UNIX -DLINUX -DPOSIX_THREADS -D__USE_GNU -D_FORTIFY_SOURCE=2 -DHANDLE_CSL_DUPLICATES -DOS=UNIX -DLINUX -DPOSIX_THREADS -D__USE_GNU -D_FORTIFY_SOURCE=2 -DHANDLE_CSL_DUPLICATES -DOS=UNIX -DLINUX -DPOSIX_THREADS -D__USE_GNU -D_FORTIFY_SOURCE=2 -DHANDLE_C SL_DUPLICATES -DOS=UNIX -DLINUX -DPOSIX_THREADS -D__USE_GNU -D_FORTIFY_SOURCE=2 -DHANDLE_CSL_DUPLICATES -o ./main.o -c main.c main.c: In function `main': main.c:6: warning: unknown conversion type character `z' in format main.c:6: warning: too many arguments for format
  2. 将格式说明符包装在目标特定的宏中(类似于register_printf_function()
  3. ...还有其他想法吗?对于不涉及特定于目标的预处理程序代码的解决方案,我将有一个强烈的偏爱,因此上述两种方法都不理想。

我认为(但不确定)交叉编译器的版本是否旧;是否已知/保证较新版本的[[of of注释工具链

具有this minGW-specific post才能将“ minGW”识别为libc的格式说明符?
更新:此交叉编译器似乎无法识别%zu;将其添加到编译器标志会生成错误“ size_t

我正在研究交叉编译到几种目标体系结构的代码。我在搜索Stack Overflow的“ printf size_t未知转换类型字符”警告中查看了极少数匹配,...

c printf mips cross-compiling format-specifiers
1个回答
0
投票
我使用的大型代码库是在几种不同的编译器下进行编译的,其中一些是旧的并且不了解-std=c99,所以我们只做类似的事情
© www.soinside.com 2019 - 2024. All rights reserved.