Linuxプラットフォームでコンパイルする場合、ターゲットライブラリの問題に遭遇することが多くありますが、静的ライブラリと動的ライブラリがあります。エンジニアリングに関しては、一度それを混ぜ合わせると、プロジェクト全体を理解して呼び出すことに大きな問題が発生するため、これらの一般的なコンパイル結果ファイルの違いをまとめています。
1.フォーマットの説明
linuxのコンパイルでは、.o .so .a .la .koなどのような接尾辞がよくありますが、linuxは拡張子を識別ファイルとして使用しません。フォーマットの唯一の根拠は、次のように仕様規定はまだ存在しています。◾.oはターゲットオブジェクトファイルで、ウィンドウ内の.objファイルと同じです。a.aは静的ライブラリです。静的接続用にlib.laによって生成された共有ライブラリは、実際には設定文書です。 *。laファイルを$ file * .laと表示するか、viを使用して表示することができます。 ◾.soはWindowsプラットフォームのdllファイルに似た共有ライブラリです。
追加:.koというファイル拡張子もありますが、これはLinuxカーネルが使用するダイナミックリンクファイルのサフィックスで、モジュールファイルに属しており、カーネルモジュールはLinuxシステムの起動時にロードされます。
次に、インスタンスを作成します。
1、.oオブジェクトファイルを作成します。
$ gcc -c test.c
test.oを生成し、リンクをスキップします。オブジェクトなので、実行可能ファイルではありません。
2、静的ライブラリファイルを作成します。
$ ar -r libtest.a test1.o test2.o
3、動的ライブラリを作成します。so
$ gcc -Wall -fpic -shared test1.c test2.c -o libtest.so
前の文を実行し、test1.cとtest2.cをコンパイルして動的ライブラリファイルlibtest.soを生成します。
4、リンクライブラリファイル
$ gcc -Wall -fpic -shared -Ltest test3.c -o libtest.so
test3.cをコンパイルし、静的libtest.aとリンクします。 (デフォルトでは、/usr /libの下にあるファイルを見つけて)libtest.so動的ライブラリーを生成します。
5、.laライブラリの生成
.laライブラリは通常makefileを通して行われます、もちろんコマンドライン、リファレンスコマンドを通しても可能です:
$ libtool --mode = link Gcc -o libmylib.la -rpath /usr /lib&nd; L /usr /lib&nd; la
libtoolはlibmylib.aファイルを検索し、それをlibmylib.laに渡します。その他のlibtoolのヘルプは以下の通りです:Tst @ Tst-PC /cygdrive /d /$ libtool --helpUsage:libtool [オプション] ... [モード-ARG] ...
一般化されたライブラリ作成サポートサービスを提供します。
--configすべての設定変数を表示 - debugシェルの詳細なトレースを有効にします-n、--dry-runコマンドを表示せずに表示 - 機能は基本的な設定情報を表示し、終了します - mode = MODE use動作モードMODE - preserve-dup-depsは、重複した依存関係ライブラリを削除しません。 - quiet、--silent情報メッセージを出力しません。 - no-quiet、 - no-silentprint情報メッセージ(デフォルト) - tag = TAGはタグTAG-vからの設定変数を使用します。--verboseはデフォルトよりも多くの情報メッセージを出力します - no-verboseは余分な情報メッセージを出力しません - version printバージョン情報-h、 - help、 - help-all短い、長い、または詳細なヘルプメッセージを表示します。
MODEは、次のいずれかにする必要があります。
クリーンビルドディレクトリからファイルを削除コンパイルソースファイルをlibtoolにコンパイルするobjectexecute auライブラリのパスを設定してから、プログラムを実行してから、libtoolのインストールを完了ライブラリのインストールまたはライブラリの実行可能リンクライブラリの作成または実行可能ファイルのインストールディレクトリからのライブラリの削除
MODE-ARGSはMODEによって異なります。オプション、 `--mode = MODE 'は、` MODE'またはそれに固有の省略形として省略することができます。MODEのより詳細な説明については、 `libtool --help --mode = MODE 'を試してください。
Whenバグを報告するには、それを再現するためのテストケースを説明し、以下の情報を含めてください。
host-triplet:i686-pc-cygwinshell:/bin /shcompiler:gcccompilerフラグ:-g -O2 -pipelinker:/usr /i686-pc-cygwin/bin/ld.exe(gnu?yes)libtool:(GNU libtool)2.4automake:automake(GNU automake)1.11.1autoconf:autoconf(GNU Autoconf)2.68
バグを報告する< [email protected]> .GNU libtoolのホームページ:< http://www.gnu.org/software/libtool/>。GNUソフトウェアを使用する一般的なヘルプ:http://www.gnu.org /gethelp /。
バス構造に応じて、バスタイプと非バスタイプに分けることができます。 89C51マイクロコントローラはバス構造であることがよくありますが、89C51マイクロコントローラにはデータバス、アドレスバス、およ
の下で複数のネットワークカードbonding
を設定する方法インターネット導入の時代には、ネットワークの高可用性は常に非常に重要な部分でした。ネットワーク障害は直接アプリケーションサービスの中断とIT技術の発展につながりますトレンドに関しては、ハ
でハードドライブまたは不良ブロックをチェックする badblocksは、不良セクタ用にハードディスクおよび外部ドライブをスキャンまたはテストできる、Linuxのようなオペレーティングシステムのコマンド
I.概要: Linuxカーネルにプログラムを追加するには、3つの作業が必要です。 1. Linuxカーネルのソースコードの対応するディレクトリにソースコードをコピーする。 2.ディレクトリのKconf