2010-04-07 17 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

相關問題