.aおよび.soファイルとは何ですか?


427

現在、CアプリケーションをAIXに移植しようとしていますが、混乱しています。.aおよび.soファイルとは何ですか。また、アプリケーションのビルド/実行時にそれらはどのように使用されますか?


116
1つはライブラリアーカイブでa、もう1つはs共有oオブジェクトです
Shiplu Mokaddim 2012年

回答:


483

アーカイブライブラリ(.a)は静的にリンクされています。つまり、gccで-cオプションを使用してプログラムをコンパイルした場合です。したがって、ライブラリに変更がある場合は、コードを再度コンパイルしてビルドする必要があります。

.aライブラリに対する.so(共有オブジェクト)の利点は、実行時にリンクされること、つまりgccで.oファイルの-oオプションを作成した後にリンクされることです。したがって、.soファイルに変更がある場合は、メインプログラムを再コンパイルする必要はありません。ただし、メインプログラムがlnコマンドで新しい.soファイルにリンクされていることを確認してください。

これは、.soファイルの作成に役立ちます。 http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html

お役に立てれば。


2
これらのいずれかはpic(位置独立コード)に関連していますか?
トランザング'19年

213

.aは静的ライブラリです。それらの内部に格納されたコードを使用する場合、コードはそれらから取得され、独自のバイナリに埋め込まれます。Visual Studioでは、これらは.libファイルになります。

.soは動的ライブラリです。それらの内部に格納されたコードを使用する場合、それは取得されず、独自のバイナリに埋め込まれます。代わりに参照されるだけなので、バイナリはそれらに依存し、soファイルのコードは実行時に追加/ロードされます。Visual Studio / Windowsでは、これらは.dllファイルになります(リンク情報を含む小さな.libファイルを含む)。


こんにちはc / c ++コードで.soファイルを逆コンパイルするオプションはありますか?
Jishant 2017年

@Ancee:この質問を見てください:stackoverflow.com/questions/205059/is-there-ac-decompiler
Paul Wintz

の小さな.libファイル.dllは、インポートライブラリと呼ばれます。
お金指向のプログラマー

13

.aファイルは通常、静的にリンクされるライブラリ(またはより正確にはアーカイブ)であり、
.soは動的にリンクされるライブラリです。

移植するには、それらを作成するためにコンパイルされたソースコード、またはAIXマシン上の同等のファイルが必要です。


.soファイルを使用するようにアプリケーションを構築するにはどうすればよいですか?
2012年

両方のタイプのライブラリを構築し、Webにリンクするための優れたリファレンスがたくさんあります。グーグルはあなたの友達です。
David Pointer

@Dunc-いくつかの方法があります。メイクファイルはありますか?通常、プログラム全体をアセンブルする(したがってリンカを呼び出す)コマンドは、-L / dir / dir1 /.../を使用してライブラリファイルを検索する場所を指定し、-lnameを使用してライブラリに明示的に名前を付けることもできます。実際の名前はlibname.aまたはlibname.soです。これにより、リンカは、これがかなり正常なプログラムである場合の対処法を理解できます。しかし、それでも.soファイルの作成または検索に問題があります。それを構築するためのソースコード、またはAIXライブラリーを持っていますか?
gbulmer 2012年

10

それらはリンク段階で使用されます。.aファイルは静的にリンクされ、ファイルはある程度リンクされ.soているため、exeを実行するたびにライブラリが必要になります。

あなたは彼らがLIBディレクトリのいずれかを見て、保存されている場所を見つけることができます... /usr/libそして/libそれらのほとんどを持っている、ともありLIBRARY_PATH、環境変数が。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.