我正在处理交叉编译到几种目标体系结构的代码。
我从堆栈溢出中搜索“ printf size_t未知转换类型字符”警告时查看了handfulofhits,但是这些帖子似乎都与minGW
有关,所以这些答案本质上是[C0对ifdef
而言,不适用于我所遇到的本质上相同的问题,即_WIN32
不能将“ printf
”识别为%zu
的格式说明符,而是使用size_t
交叉编译器。 >
是否有一个现有的编译器标记(用于指定的交叉编译器),使libc能够识别“%zu”作为mips
的格式说明符?
size_t
如果对粗体问题的直接回答是“否”,还有什么其他可能的解决方案?我想到的可能性是...
$ 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
register_printf_function()
)...还有其他想法吗?对于不涉及特定于目标的预处理程序代码的解决方案,我将有一个强烈的偏爱,因此上述两种方法都不理想。
我认为(但不确定)交叉编译器的版本是否旧;是否已知/保证较新版本的[[of of注释工具链
具有thisminGW
-specific post才能将“ minGW
”识别为libc
的格式说明符?%zu
;将其添加到编译器标志会生成错误“ size_t
”我正在研究交叉编译到几种目标体系结构的代码。我在搜索Stack Overflow的“ printf size_t未知转换类型字符”警告中查看了极少数匹配,...
-std=c99
,所以我们只做类似的事情