10

Linux Mint 14 NadiaにMatlabをインストールしました(uname -a show:Linux Ideapad-Z570 3.5.0-17-generic#28-Ubuntu SMP Tue Oct 9 19:31:23 UTC 2012 x86_64 x86_64 x86_64 GNU / Linux)コマンドラインから呼び出すと、「/ lib64/libc.soが見つかりません」というメッセージが表示されます。

/ lib64に次のようにリンクを作成して、mathworksのヘルプに従いました。

ln -s /lib/x86_64-linux-gnu/libc.so.6 .

それで問題は解決しました。

ここで、このライブラリの検索を行うと、次のようになります。

locate "libc.so"
/lib/i386-linux-gnu/libc.so.6
/lib/x86_64-linux-gnu/libc.so.6
/usr/lib/x86_64-linux-gnu/libc.so

このコンピューターでgccを使用してコンパイルし、完全な64ビットコンパイルを行いたいと思います。これらの異なるlibc.soライブラリをすべて持つとはどういう意味ですか?gnuコンパイラはどちらを使用しますか?64ビット用にコンパイルするには、gccで何か別のことをする必要がありますか?

また、新しいi7コア用にできる限り最適化したいと思います!!!

4

3 に答える 3

13

/lib/i386-linux-gnu/libc.so.6

これは、ライブラリの32ビットバージョンです。

/lib/x86_64-linux-gnu/libc.so.6

これは、ライブラリの64ビットバージョンです。

どちらも通常、実際のライブラリファイルへのシンボリックリンクであり、通常、たとえばglibcのリリース番号に従って名前が付けられます。libc-2.15.so

/usr/lib/x86_64-linux-gnu/libc.so

これはライブラリではなく、上記のシンボリックリンクを参照するリンカースクリプトファイルです。

なぜこれらすべてが必要なのですか?

libc.soまず、インストールされているlibcのバージョンに関係なく、コンパイラドライバは常にオプションをリンカに渡すため、リンカは常にを検索し-lcます。名前libcは同じままで、ライブラリの最新バージョンを示します。

シンボリックリンクは、ライブラリのsonamelibc.so.6にちなんで名付けられています。これは、多かれ少なかれ、ライブラリのABIバージョンに対応しています。に対してリンクされている実行可能ファイルには、の実行時の依存関係が含まれています。libc.solibc.so.6

いつかひどくABIと互換性のないlibcがリリースされると想像すると、たとえばその名前を付けることができますlibc.so.7。たとえば、このバージョンのcoukldは古いlibc.so.6バージョンと共存するため、一方または他方に対してリンクされた実行可能ファイルは同じシステムに共存できます。

そして最後に、名前libc-2.15.soはlibcリリースを参照します。新しいlibcパッケージをインストールすると、名前はに変わりlibc-2.16.soます。以前のリリースとバイナリ互換である場合、libc.so.6リンクはそのように名前が付けられたままになり、既存の実行可能ファイルは引き続き機能します。

于 2012-12-09T20:13:51.227 に答える
3

どちらを使用するかを見つけるには、最初にld(リンカー)がライブラリを見つけるために使用する順序を次のように見つける必要があります。

ld --verbose | grep SEARCH

私にとって、それは私にこの出力を与えました:

SEARCH_DIR("/usr/x86_64-unknown-linux-gnu/lib64"); SEARCH_DIR("/usr/x86_64-unknown-linux-gnu/lib"); SEARCH_DIR("/usr/lib"); SEARCH_DIR("/usr/local/lib");

これは、私のコンピューターで、ld次の順序でこれらのディレクトリを検索することを意味します。

  1. / usr / x86_64-unknown-linux-gnu / lib64
  2. / usr / x86_64-unknown-linux-gnu / lib
  3. / usr / lib
  4. / usr / local / lib

したがって、libcが/ usr / x86_64-unknown-linux-gnu / lib64にあり、libcも/ usr / libにある場合、リストされているため、/ usr / x86_64-unknown-linux-gnu/lib64バージョンを使用します。最初。

于 2012-12-09T19:42:33.970 に答える
1

作成したシンボリックリンクは、GCCにはまったく影響しません。-m3232ビットバージョンは、 GCCフラグを使用してコンパイルする場合にのみ使用されます。GCCは、(そのフラグを使用して)特に指示しない限り、32ビットバイナリの生成を試みません。

于 2012-12-09T19:52:07.430 に答える