2010-04-07 3 views
1

간단한 Hello World를 컴파일 할 때! 내 로컬 데비안 lenny x64에서 sscanf 기능을 사용하는 프로그램입니다. 그러나 CentOS x86을 실행하는 서버에 동일한 프로그램을 업로드하면 작동하지 않습니다. sscanf를 사용하지 않으면 프로그램이 두 컴퓨터에서 작동합니다.sscanf + c99가 일부 플랫폼에서 작동하지 않습니까?

는 GCC -std = C99 -O2 -pipe -m32

내가 sscanf를 함께하지만 -std =의 C99없이 컴파일하면, 그것은 두 컴퓨터 모두에서 작동합니다.

의 gcc -O2 -pipe -m32

CentOS는 x86에서 sscanf에서와 C99의 문제는 무엇입니까? -m32 플래그로 컴파일하면 모든 Linux에서 작동 할 것이라고 생각했습니다. (CentOS 서버에 대한 액세스가 제한되어 있으므로 오류 메시지에 액세스 할 수 없습니다.)

+5

'sscanf()'함수와 약간의 설명을 사용하여 코드 주위에 몇 줄을 표시해야합니다. "작동하지 않을 것"이라는 말이 정확히 무엇입니까? –

+0

"작동"과 "작동하지 않음"은 문제에 대한 의미있는 설명이 아닙니다. – AnT

답변

1

바이너리 또는 소스를 업로드 한 다음 다시 컴파일 하시겠습니까? 바이너리를 업로드하는 중이라면 아마도 데비안과 CentOS 사이의 라이브러리 호환성 문제가있을 것입니다.

이 경우 소스 만 업로드하고 CentOS에서 다시 컴파일하십시오.

0

@ CentOS를 컴파일 할 수있는 권한이없는 경우 정적 바이너리를 컴파일 해보십시오. glibc보다 작은 바이너리를 만드는 dietlibc를 사용하거나 데비안이 데비안 "squeeze"를 시작하는 데 사용할 기본 C 라이브러리 인 EGLIBC를 시도 할 수 있습니다.

6

아마도 CentOS 상자는 이전 버전의 glibc를 사용하고있을 것입니다. 비표준 GNU의 scanf 구현으로 c99와 glibc 충돌이 생겨서 -std=c99이 사용 중일 때 *scanf__isoc99_*scanf으로 리디렉션하는 불쾌한 해킹이 추가되었습니다. glibc 복사본에 __isoc99_sscanf 기호가 없으면 프로그램이 실행되지 않습니다.

정적 링크 또는 추한 역방향 호환성 해킹없이 다른 libc에 링크하면 문제가 해결됩니다.

0

내가 비슷한 문제가 함께했다, 그것은 우분투 64 비트 @ 작동하지만 컴파일은 CenseOS 64 비트 (REHL5 바탕 화면) @ 실패

오류 메시지는 다음과 같습니다

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

내가 REHL5에 @Ubuntu를 컴파일 된 실행 파일을 복사하고 실행할 때 다른 오류가 나타나 플래그 =의 C99을 -std없이

elf file os abi invalid 

그것이 내가 C에서 안돼서, 일부 해결 방법 학습자는 찾고, 컴파일, 전의. 플래그를 추가하십시오.

메이크 :

당신은 여기에서 2.7

다운로드 rpm 패키지로의 glibc를 업데이트해야

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

: 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.RPM

의 glibc-(STABLE) - 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-devel- 2.7-2.x86_64.rpm

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