1

私はいくつかのカスタム C++ コードを作成し、ubuntu で正常に動作しますが、サーバー (centos 5 を使用) にアップロードすると失敗し、ライブラリが古くなっていると表示されます。私はあちこちでグーグル検索しましたが、centos は最新のライブラリを使用できません。stl に対してコンパイルしてバイナリに含め、centos が古いライブラリを使用しても問題にならないようにするにはどうすればよいですか?

PSソースをサーバーにアップロードしてそこでコンパイルしたくありません。

4

2 に答える 2

3

リンク手順では、「-static」フラグを gcc に追加するだけです: http://gcc.gnu.org/onlinedocs/gcc-4.4.1/gcc/Link-Options.html#Link-Options

于 2009-09-02T22:51:58.407 に答える
1
  1. サーバー上のライブラリのバージョンに適合するコンパイラを Ubuntu ボックスにインストールできます。

  2. centos の代わりにロードされるようにリンクを調整する場合は、アプリケーションをコンパイルしたシステムから取得した libstdc++.so を使用してアプリケーションを出荷できます。

  3. 静的にコンパイルできます。これを行うには、コンパイラを g++ から

    gcc -lgcc_s -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic

好きなものを選んでください。アプローチ (2) と (3) では、依存関係の問題が発生する可能性があることに注意してください。プロジェクト (特に、静的にリンクされている stdc++ 実装がアプリの一部になっている) では、システム ライブラリにいくつかの関数を提示する必要がある場合があります。セントス。そのような関数がない場合、アプリケーションは起動しません。これが発生する理由は、コンパイルしている ubuntu システムが新しく、Linux ライブラリで前方互換性が保持されていないためです。

于 2009-09-02T22:52:15.363 に答える