1

シンプルな Hello World! をコンパイルすると ローカルの Debian lenny x64 で sscanf 関数を使用するプログラムが動作します。しかし、CentOS x86 を実行しているサーバーに同じプログラムをアップロードすると、機能しません。sscanf を使用しない場合、プログラムは両方のコンピューターで動作します。

gcc -std=c99 -O2 -pipe -m32

sscanf を使用して -std=c99 を指定せずにコンパイルすると、両方のコンピューターで動作します。

gcc -O2 -パイプ -m32

CentOS x86 での sscanf と c99 の問題は何ですか? -m32 フラグを指定してコンパイルすると、すべての Linux で動作すると思いましたか? (CentOS サーバーへのアクセスが制限されているため、エラー メッセージにアクセスできません。)

4

5 に答える 5

6

おそらくCentOSボックスは古いバージョンのglibcを使用しています。scanf実装に対する非標準のGNU拡張機能は、最終的にglibcをc99と競合させるため、使用中にリダイレクトするという厄介なハックを追加しまし*scanfた。glibcのコピーにシンボルがない場合、プログラムは実行に失敗します。__isoc99_*scanf-std=c99__isoc99_sscanf

静的リンク、または醜い後方互換性ハックなしで別のlibcにリンクすると、問題が解決します。

于 2010-08-06T12:16:50.390 に答える
1

バイナリまたはソースをアップロードしてから再コンパイルしていますか? バイナリをアップロードしている場合、Debian と CentOS の間でライブラリの互換性の問題が発生している可能性があります。

その場合は、ソースのみをアップロードし、CentOS で再コンパイルします。

于 2010-04-07T20:09:16.420 に答える
0

同様の問題が発生しました。Ubuntu 64 ビットでは動作しますが、CenseOS 64 ビット (REHL5 デスクトップ) ではコンパイルに失敗します。

エラーメッセージは次のとおりです。

undefined reference to `__isoc99_sscanf@GLIBC_2.7'

@Ubuntu でコンパイルした実行可能ファイルを REHL5 にコピーして実行すると、別のエラーが表示されました。

elf file os abi invalid

フラグ -std=c99 なしでコンパイルされています。私は C の初心者で、いくつかの回避策を探しています。いくつかのフラグを追加します。

メイクファイル:

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
于 2011-03-31T15:45:40.193 に答える
0

@ CentOS をコンパイルする権限がない場合は、静的バイナリをコンパイルしてみてください。glibc よりも小さいバイナリを作成する Dietlibc を使用するか、Debian が Debian の「スクイーズ」を開始するときに使用するデフォルトの C ライブラリである EGLIBC を試すことができます。

于 2010-05-07T09:03:28.530 に答える
-1

glibc を 2.7 に更新する必要があります

ここから rpm パッケージをダウンロードします: http://archive.fedoraproject.org/pub/archive/fedora/linux/releases/8/Everything/x86_64/os/Packages/

ニーズ:

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

于 2011-04-19T08:31:22.357 に答える