sscanf+c99在某些平台上不工作?
当我编译一个简单的Hello World时!在我的本地Debian lenny x64上使用sscanf函数的程序,可以正常工作。但是,当我将相同的程序上载到运行CentOS x86的服务器时,它将无法工作。如果我不使用sscanf,那么该程序在两台计算机上都能工作 gcc-std=c99-O2-管道-m32 如果我使用sscanf编译它,但不使用-std=c99,那么它在两台计算机上都可以工作 gcc-O2-管道-m32sscanf+c99在某些平台上不工作?,c,gcc,debian,centos,scanf,C,Gcc,Debian,Centos,Scanf,当我编译一个简单的Hello World时!在我的本地Debian lenny x64上使用sscanf函数的程序,可以正常工作。但是,当我将相同的程序上载到运行CentOS x86的服务器时,它将无法工作。如果我不使用sscanf,那么该程序在两台计算机上都能工作 gcc-std=c99-O2-管道-m32 如果我使用sscanf编译它,但不使用-std=c99,那么它在两台计算机上都可以工作 gcc-O2-管道-m32 CentOS x86上的sscanf和c99有什么问题?我认为使用-m3
CentOS x86上的sscanf和c99有什么问题?我认为使用-m32标志编译可以在所有linuxe上运行?我对CentOS服务器的访问权限有限,因此无法访问错误消息。您是上载二进制文件还是源文件,然后重新编译?如果您正在上载二进制文件,则可能会遇到Debian和CentOS之间的库兼容性问题
如果是这种情况,请仅上载源代码并在CentOS上重新编译。您是上载二进制文件还是源代码然后重新编译?如果您正在上载二进制文件,则可能会遇到Debian和CentOS之间的库兼容性问题
如果是这种情况,请仅上载源代码并在CentOS上重新编译。如果您没有编译@CentOS的权限,请尝试编译静态二进制文件。您可以使用dietlibc生成比glibc更小的二进制文件,也可以尝试使用EGLIBC,这是默认的C库,Debian将使用它启动Debian压缩。如果您没有编译@CentOS的权限,请尝试编译静态二进制文件。您可以使用dietlibc生成比glibc更小的二进制文件,也可以尝试使用EGLIBC,这是默认的C库,Debian将使用该库启动Debian压缩。可能CentOS box使用的是旧版本的glibc。由于scanf实现的非标准GNU扩展最终导致glibc与c99冲突,因此他们添加了一个恶意攻击,即在使用-std=c99时将*scanf重定向到*scanf;如果您的glibc副本缺少u_isoc99_sscanf符号,则程序将无法运行
静态链接,或者链接到不同的libc而没有丑陋的反向兼容性黑客,可以解决这个问题。可能CentOS box使用的是旧版本的glibc。由于scanf实现的非标准GNU扩展最终导致glibc与c99冲突,因此他们添加了一个恶意攻击,即在使用-std=c99时将*scanf重定向到*scanf;如果您的glibc副本缺少u_isoc99_sscanf符号,则程序将无法运行
静态链接,或者链接到不同的libc而没有丑陋的反向兼容性黑客,可以解决这个问题。我提出了类似的问题,它在@Ubuntu 64位运行,但编译失败@CenseOS 64位REHL5桌面: 错误消息是:
undefined reference to `__isoc99_sscanf@GLIBC_2.7'
当我将@Ubuntu编译的可执行文件复制到REHL5并运行时,出现了另一个错误:
elf file os abi invalid
它是在没有flag-std=c99的情况下编译的,我是C语言的新手,正在寻找一些解决方法,例如添加一些flag
生成文件:
CC=gcc
CCFLAGS= -Wall -O2 -DLINUX -I../include
demos:linuxdemo.c
$(CC) $(CCFLAGS) -o demoA linuxdemo.c -L../lib -lsense4 -lusb
$(CC) $(CCFLAGS) -o demoSO linuxdemo.c -lusb -lsense4
clean:
rm -f demoA
rm -f demoSO
我遇到了类似的问题,它在@Ubuntu 64位运行,但在@CenseOS 64位REHL5桌面上编译失败: 错误消息是:
undefined reference to `__isoc99_sscanf@GLIBC_2.7'
当我将@Ubuntu编译的可执行文件复制到REHL5并运行时,出现了另一个错误:
elf file os abi invalid
它是在没有flag-std=c99的情况下编译的,我是C语言的新手,正在寻找一些解决方法,例如添加一些flag
生成文件:
CC=gcc
CCFLAGS= -Wall -O2 -DLINUX -I../include
demos:linuxdemo.c
$(CC) $(CCFLAGS) -o demoA linuxdemo.c -L../lib -lsense4 -lusb
$(CC) $(CCFLAGS) -o demoSO linuxdemo.c -lusb -lsense4
clean:
rm -f demoA
rm -f demoSO
您需要将glibc更新为2.7 从此处下载rpm软件包: 需要: libc-common-2.7-2.x86_64.rpm glibc-headers-2.7-2.x86_64.rpm glibc-devel-2.7-2.x86_64.rpm glibc-2.7-2.x86_64.rpm 命令: rpm-Uvh-aid-nodeps glibc-common-2.7-2.x86_64.rpm rpm-Uvh-aid-nodeps glibc-headers-2.7-2.x86_64.rpm rpm-Uvh-aid-nodeps glibc-devel-2.7-2.x86_64.rpm
rpm-Uvh-aid-nodeps glibc-2.7-2.x86_64.rpm您需要将glibc更新为2.7 从此处下载rpm软件包: 需要: libc-common-2.7-2.x86_64.rpm glibc-headers-2.7-2.x86_64.rpm glibc-devel-2.7-2.x86_64.rpm glibc-2.7-2.x86_64.rpm 命令: rpm-Uvh-aid-nodeps glibc-common-2.7-2.x86_64.rpm rpm-Uvh-aid-nodeps glibc-headers-2.7-2.x86_64.rpm rpm-Uvh-aid-nodeps glibc-devel-2.7-2.x86_64.rpm
rpm-Uvh-aid-nodeps glibc-2.7-2.x86_64.rpm您可能应该在使用sscanf函数的代码周围显示几行代码,并对您所说的“它不起作用”的确切含义进行一点描述。对问题而言,有效与不起作用并不是一个有意义的描述。您可能应该在使用sscanf的代码周围显示几行代码函数和一点你所说的确切含义的描述将不起作用。工作与不工作不是对问题的有意义的描述。