Linuxシステムコネクタのldリンク順序が正しくないと、未定義の参照関数エラーが発生する場合があります。次の小シリーズは、Linuxでの接続方法を示していますldがリンクされている順番。
リンクライブラリのシリーズのLD元の順序は、それ以外の場合は、関数の定義が見つからないことを意味し、参照未定義エラー関数シンボルを報告します、非常に敏感です。実際、ライブラリは正しく開くことができます。ライブラリlibA.aがライブラリlibB.aに依存している場合、コネクタの引数はln -lA -lBになります。これは、次のように記述する必要があります。そうでなければそれは間違っているでしょう。
これは歴史の遺産のようです。端的に言えば、ライブラリが重要ではないと判断した場合、それは最後に置かれます。つまり、ライブラリがロードされる順序が左から右の順になります。これが、昔のマシンが壊れた理由です。 CPUを含む内蔵およびハードドライブは非常にまれで貴重です。ですから、必要なものは事前に入手しておく必要がありますが、一度必要になったらロードし、必要でなければロードしないでください。これは上記のエラー、socketcommにロードされたコンパイラが説明することができ、依存ライブラリがあることを発見し、そしてそれを探し、欠陥があるので、それは間違っています。
つまり、すべての人が共有できるように、依存関係はできる限り配置されます。
同じ関数名やクラス名を使用しているライブラリが複数ある場合、構造体の名前はどうなりますか?
nmやreadelf、lddなどのコマンドを使用して、ライブラリの依存関係とシンボルテーブル、およびエクスポートされた関数シンボルを表示できます。これにより、順序が異なるため、上記のさまざまなコンパイル結果を確認できます。
テストライブラリを動的と動的、静的と静的、そして静的に分類します。
最初のケース:静的ライブラリに同じ名前の関数が含まれています。
コードは次のとおりです。
gcc -L./main.c -lA -lB
コンパイルエラー、 `XXX‘の多重定義中。定義機能を繰り返してください。
2番目のケース:移動ライブラリ
これは、前述のように、左から順に、必要に応じてロードするロードの順序によって異なります。
コードのコードは次のとおりです。
gcc main.c。 /libB.so。 /libA.so
コードのコードは次のとおりです。
gcc main.c。 /libA.so /libB.so
このリンク方法は、暗黙のリンク、つまりロード時のリンクですが、以前の静的ライブラリはコンパイル時の接続です。
つまり、コンパイルの順序によって、ライブラリ内のどのライブラリが同じ名前で呼び出されるかが決まります。
3番目のケース:上記の静的読み込みではなく、動的読み込みです。
コードのコードは次のとおりです。
gcc main.c -ldl。 /libA.so /libB.so
コードのコードは次のとおりです。
gcc main.c -ldl。 /libB.so。 /libA.so
リンクオプションがない場合は、2番目のケースと同じです。 Lオプションを追加した後に、ロードするものを指定してください。
libBは静的リンクです。 libAは動的にロードされます。
コードのコードは以下のとおりです。
gcc -L./main.c -ldl&lndl; lB
動的ライブラリのライブラリ名がコンパイルオプションに表示されます。 >
コードのコードは次のとおりです。
gcc -L./main.c -ldl -lB。 /libA.so
コードのコードは次のとおりです。
gcc -L./main.c -ldl。 /libA.so -lB
静的および動的がある場合、コンパイルオプションに動的ライブラリライブラリ名を追加しないでください。静的ライブラリに追加されている場合、出力は正常になります。リンクの順序は関係ありません。
上記はLinuxシステムでのコネクタのldリンク順序の紹介ですが、順序が異なるとコンパイル結果も異なるため、依存関係は可能な限り配置されています。
Gitは分散バージョン管理システムで、GitHubはGitベースのWebサイトで、ユーザーにGitサービスを提供します。 GitHubコードは質問をアップロードして、理解します。 ウェブサイト1.
Linuxコマンド、sttyコマンドは主に端末の設定を印刷または変更するために使用されます。さらに、さまざまなパラメータでさまざまな機能を実現できます。簡単な紹介、私は理解していない友人にいくつかの助
Linuxシステムでは、ディスク上の利用可能なスペースを拡張するためにいくつかの大きいファイルをクリーンアップする必要があることがよくあります。ただし、これらのファイルをクリーンアップする前に、まずそ
findコマンドは主にファイル検索のために使われますが、前の記事で詳しく説明されています(System HomeのLinux Home findコマンドの一般的な使い方の概要をご覧ください)今日、XiaobianはLinux findコマンドとxargsコマンドを紹介します。一緒に使って、それを知りましょう。とき
ファイルと一致するようにfindコマンドを使用するには、プロセ
Xargsファイル 出力: コードは次のとおりです。 [root @ localhost test]#ll 合計312 -rw- R - r-- 1ルートルート302108 11-03
Ubuntuプログラムウィンドウで閉じる/最大化/最小化ボタンの位置を変更する方法
LinuxはどのようにコンピュータがUSB 3.0インタフェースを持っているかどうかを区別します
GNOME 3を使ったUbuntu 12.04のインストール方法
UbuntuシステムインストールチュートリアルUbuntuシステムのインストール方法
LinuxシステムのRhythmboxプレーヤーはどのように文字化けした中国語を解決するのですか?
Linuxではコマンドを使用して大きいファイルを整理していますステップ
AIXの電源を切った後にhacmpが起動しない場合はどうすればいいですか?