0

LinuxでCを使用していくつかのプログラムを作成します。これらのプログラムを、fedoraまたはubuntuがインストールされている多くのリモートコンピューターで実行したいと思います。

ローカルマシンでgccを使用してプログラムをコンパイルしましたが、excutableファイルはリモートマシンでは機能しません。

例:私は

gcc -o udp_server udp_server.c

ローカルマシンで実行可能なバイナリファイルudp_serverを取得し、それをリモートマシンにコピーして実行すると、エラーは次のようになります。

-bash:./udp_server:/lib64/ld-linux-x86-64.so.2:不正なELFインタープリター:そのようなファイルまたはディレクトリはありません


ローカルマシン:fedora Fedoraリリース16(Verne)カーネル\ r on \ m(\ l)3.6.10-2.fc16.x86_64 GNU / Linux

リモートマシン:Fedoraリリース12(コンスタンティン)カーネル\ r on \ m(\ l)2.6.32-36.onelab.x86_64 GNU / Linux

これらのリモートマシンにはgccコンパイラがないので、それらのリモートマシンで実行できるようにいくつかの実行可能なファイルを作成できることを願っています

では、どのような種類の実行可能なファイルを作成する必要があり、どのように作成するのでしょうか。推奨ツールまたは手順はありますか?ありがとう!

4

3 に答える 3

3

Cで記述されたプログラムを実行するには、最初にそれをコンパイルして実行可能ファイルを生成する必要があります。Linuxでは、Cコンパイラは通常「GnuCコンパイラ」またはgccです。

LinuxでCプログラムをコンパイルする場合、通常は他のLinuxコンピューターで実行する必要があります。ただし、これを機能させるには、いくつかの条件を満たす必要があります。

  • コンパイルされた実行可能ファイルは、特定のプロセッサアーキテクチャ用にコンパイルされます。たとえば、x86-x64用にコンパイルした場合、プログラムはx86またはPowerPCでは実行されません。
  • プログラムが共有ライブラリを使用する場合、これらはターゲットシステムにインストールする必要があります。Cライブラリ「libc」はどこにでもインストールされていますが、他のライブラリはインストールされていない場合があります。

コンパイル方法について:単純なプログラムの場合、gcc直接呼び出すことができます。より複雑なプログラムの場合は、いくつかのビルドツールをお勧めします。選択できるものはたくさんあります。2つの一般的な選択肢は、GNU make(従来のソリューション)とCMakeです。

プログラムを配布するには:実行可能ファイルが1つしかない場合は、この実行可能ファイルをコピーするだけです。プログラムが複数のファイル(画像、データファイルなど)で構成されている場合は、ソフトウェアパッケージとしてパッケージ化する必要があります。これにより、ユーザーはRPMやdpkgなどのパッケージマネージャーを使用してインストールできます。これを行う方法は、さまざまなLinuxディストリビューションのさまざまなパッケージガイドで説明されています。

最後に、アドバイスがあります。ソフトウェア開発全般、特にCについてはほとんど知らないようです。Cのprogramminに関するチュートリアルを読むことを検討してください。これにより、これらの(および他の多くの)質問に答えることができます。数え切れないほどの本とオンラインチュートリアルがあります-私はgbdirectによる「TheCbook を推薦することができます。

于 2013-03-08T12:50:32.520 に答える
2

表示される問題は、ターゲットマシンにダイナミックライブラリがないことです。必要なライブラリを確認するには、「ldd」プログラムを使用する必要があります。例(すべてのLinuxディストリビューションにある標準プログラム「test」に対して実行するだけです):

$ ldd /usr/bin/test
    linux-vdso.so.1 =>  (0x00007fff5fdfe000)
    libc.so.6 => /lib64/libc.so.6 (0x00000032d0600000)
    /lib64/ld-linux-x86-64.so.2 (0x00000032cfe00000)

FedoraおよびRHELでは、次のコマンドを使用して、インストールするRPMパッケージを見つけることができます。

$ rpm -q --whatprovides /lib64/ld-linux-x86-64.so.2
glibc-2.16-28.fc18.x86_64

そして、それをインストールする必要があります:

$ yum -y install glibc-2.16-28.fc18.x86_64

私はUbuntu/Debianを使用していません、これを行う方法がわかりません。32ビットシステムでは64ビット用のライブラリは使用できませんが、64ビットシステムではこれらのライブラリには通常のi686タグがあり、インストール可能であることに注意してください。

于 2013-03-08T17:47:43.410 に答える
0

通常、アーキテクチャを維持している限り、さまざまなマシンでプログラムを実行できます。たとえば、32ビットマシンで64ビットプログラムを実行することはできません。また、その逆も可能です(32ビットライブラリをインストールすることでこれを回避できますが、それは難しすぎる可能性があります)。

異なるディストリビューション、または同じLinuxディストリビューションの異なるバージョンがある場合、これは問題になる可能性があります。同じメジャーバージョンにすべての依存関係があることを確認する必要があります。

または、Linuxの世界では通常ではない、静的にライブラリをリンクすることもできますが、これは可能です。GCCの使用方法を学び、それを行う方法を学びます。

于 2013-03-08T12:52:33.420 に答える