2010-04-07 16 views
1

当我编译一个简单的Hello World!在我的本地Debian lenny x64上使用sscanf函数的程序,它可以工作。但是当我将相同的程序上传到运行CentOS x86的服务器时,它将无法工作。如果我不使用sscanf,那么该程序在两台计算机上都能正常工作。sscanf + c99在某些平台上无法工作?

的gcc -std = C99 -02 -pipe -m32

如果我有sscanf的,但没有-std = C99编译它,然后它在两台计算机上。

GCC -02 -pipe -m32

什么是sscanf的和C99在CentOS x86的问题?我认为使用-m32标志编译适用于所有的Linux? (我对CentOS服务器的访问权限有限,因此我无权访问错误消息。)

+5

您应该使用'sscanf()'函数和一点点描述“这不行”的意思是什么。 – 2010-04-07 20:00:20

+0

“作品”与“不工作”不是对问题的有意义的描述。 – AnT 2010-05-07 09:08:06

回答

1

您是上传二进制文件还是源代码,然后重新编译?如果您正在上传二进制文件,您可能会遇到Debian和CentOS之间的库兼容性问题。

如果是这样,请仅上载源代码并在CentOS上重新编译。

0

如果您没有编译@ CentOS的权限,请尝试编译静态二进制文件。您可以使用比glibc制作更小的二进制文件的dietlibc,或者尝试使用EGLIBC,这是Debian将使用Debian“挤压”的默认C库。

6

可能CentOS盒子使用的是旧版本的glibc。由于其scanf实现的非标准GNU扩展最终导致glibc与c99发生冲突,因此当使用-std=c99时,他们添加了一个令人讨厌的黑客行为,将*scanf重定向到__isoc99_*scanf;如果您的glibc副本缺少__isoc99_sscanf符号,则程序将无法运行。

静态链接或链接到不同的libc而没有丑陋的向后兼容性黑客可以解决问题。

0

我想出了类似的问题,它的工作原理@ Ubuntu的64位,但编译失败@ CenseOS 64位(REHL5桌面):

的错误信息是:

undefined reference to `[email protected]_2.7' 

当我复制编译@Ubuntu到REHL5的可执行文件,并运行它的另一个错误出现:

elf file os abi invalid 

没有标志-STD = C99是编译,我在℃的新手,看着前页一些解决方法,恩。添加一些标志。

的Makefile:

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 
-1

您需要从这里更新您的glibc 2.7

下载的rpm包: http://archive.fedoraproject.org/pub/archive/fedora/linux/releases/8/Everything/x86_64/os/Packages/

需求:

的libc,共2.7〜 2.x86_64.rpm

glibc -headers-2.7-2.x86_64。转

的glibc-devel的-2.7-2.x86_64.rpm

的glibc-2.7-2.x86_64.rpm

命令:

转速-Uvh --aid --nodeps glibc-共2.7-2.x86_64.rpm

转速-Uvh --aid --nodeps glibc的报头-2.7-2.x86_64.rpm

转速-Uvh --aid --nodeps的glibc-德弗尔2.7-2.x86_64.rpm

rpm -Uvh --aid --nodeps glibc-2.7-2.x86_64.rpm

相关问题