3

Ubuntu9.10デスクトップに共有ライブラリをコンパイルしました。共有ライブラリをRedHatEnterprise5ボックスを持っている共同開発者に送信したいと思います。

彼は自分のマシンで私の共有ライブラリを使用できますか?

4

5 に答える 5

5

最初のポイント:コンパイラのバージョンに関するすべての答えは誤った方向に進んでいるようです。重要なのはリンケージ(そしてもちろんアーキテクチャー)です。

.soファイルを開始システムに(たとえば、独自のディレクトリ/usr/local/*またはディレクトリに)コピーする場合は/opt/*、LD_PRELOAD環境設定を使用して目的の実行可能ファイルを実行してみてください。リンカ(ld-linux.so)が2つの間のすべてのシンボルを解決できた場合、プログラムをロードして実行する必要があります。

したがって、(既存のシステムライブラリを上書きせず、LD_ * /etc/ld.so.preload(chrootで?)マジックを使用してターゲット実行可能ファイルをこのライブラリにリンクしない限り、可能であり、合理的に安全である必要があります。

しかし、それは悪い考えだと思います。パッケージ管理の問題があります。UbuntuとRedHatの両方に優れたパッケージ管理ツールがあります。それらを使用してください!(パッケージ管理について質問する適切な場所はServerFaultまたはSuperUserであり、間違いなくSOではないことに注意してください)。

于 2009-11-21T09:37:41.710 に答える
3

ありそうもないことですが、もしうまくいっていたら、あなたはこの質問をしなかったでしょう?

DistroWatchによると、Ubuntu 9.10 は を使用しglibc-2.10.1、RHEL-5.4 は を使用しglibc-2.5ます。これは、ライブラリがバージョン以降のシンボルを参照している場合、GLIBC_2.6RHEL-5 では機能しないことを意味します。

そのような記号を使用しているかどうか (およびどの記号を使用しているか) は、次の方法で確認できます。

readelf -s /path/to/your/library.so | egrep 'GLIBC_2.([6-9]|10)'

出力が空でない場合、ライブラリは RHEL-5 で動作しません。

autopackageを使用すると、RHEL-5 と互換性のあるライブラリをビルドできる場合があります。

于 2009-11-22T06:28:20.070 に答える
0

Xinusに参加します。IMHOコンパイラは、UbuntuおよびRHELの場合、gccになり、glibcと緊密に結合されます。したがって、両方のマシンで同じである場合、おそらくそれは実行されます。

しかし、なぜ推測するのか、小さなテストドライブ(主に数行)を実行し、それが実行されている場合は、より大きなプログラムが「敵対的な」環境で実行される可能性があります:)

于 2009-11-21T08:36:13.590 に答える
0

最善の解決策は、あなたのコードを共同開発者に渡して、コンパイルしましょう!!!!

あなたはいくつかの解決策を持っています

  • 彼の gcc をあなたと同じバージョンにアップグレードする
  • 彼の gcc バージョンをコンピューターにインストールしてコンパイルします

両方が同じアーキテクチャ 32 ビットまたは 64 ビットで作業しているかどうかを確認する必要があります。

私の意見では、おそらく同じ glibc を使用していないため、問題が発生する可能性があります。

于 2009-11-21T08:54:21.010 に答える