0

したがって、次の構成でOpenSuse13.1でコンパイルされているこのプログラムがあります。

  • GCC 4.6-15.1.3
  • GLIBC 2.14
  • Libcrypto 1.0

ただし、次の構成を持つOpenSuse10.3で実行する必要があります。

  • GCC 4.2-24
  • GLIBC 2.6.1-18
  • Libcrypto 0.9.8

これまでに見つけた唯一の依存関係は__isoc99_sscanf、GLIBC2.7で導入されたものでした。独自のsscanf関数を記述してこれを修正し、ソースコードに次の行を追加して置き換えようとしました。 __asm__(".symver __isoc99_sscanf1, __isoc99_sscanf@@GLIBC_2.7");

これでlibcryptoの依存関係が残り、古いOpenSuse環境で実行しようとするとmunmap()(プログラムをstraceするとき)関数でセグフォールトしているように見えます(GCCのものである可能性がありますか?)

したがって、基本的に、この種の下位互換性の問題を修正するための標準的な手順が何であるかはわかりません。これについて何か考えはありますか?

4

1 に答える 1

0

通常、古い gcc、glibc、およびその他のライブラリを新しい OS にインストールし (通常は、この理由で RPM として提供されます)、それらのみを使用してコンパイルするようにします。後方非互換性をすべて自分で修正しようとするのは困難な戦いです。

より徹底するには、古い OS の chroot をビルドするか、RPM にパッケージ化して、依存関係が自動的にチェックされるようにすることもできます。Open Build Serviceのようなものを使用すると、これが非常に簡単になります。

于 2013-03-28T18:41:09.213 に答える