通常のプログラムと比較すると、ダイナミック リンク ライブラリにはメイン関数がなく、一連の関数の実装です。共有および fPIC コンパイル パラメータを使用してダイナミック リンク ライブラリ ファイルを生成します。プログラムがライブラリ関数を呼び出すときは、このライブラリに接続するだけで済みます。たとえば、次の例では、単純な整数演算トランスポート ダイナミック リンク ライブラリを実装し、calculate.h と calculate.c という 2 つのファイルを定義し、libcac.so ダイナミック リンク ライブラリを生成します。 バイナリファイルに役立つコマンド ファイルの種類を確認してください ファイル バイナリがリンクされているライブラリを確認する ldd バイナリファイルに含まれるシンボルを表示します。Tはロード中、Uは未定義のシンボルを意味します。 ナノメートル バイナリファイルから情報を読み取る readelf -a smu.o バイナリファイルをアセンブリに変換する objdump -d 合計.o ダイナミックリンクライブラリの生成 合計.c #include <stdio.h> #include <stdlib.h> int 合計(int x){ int i、結果=0; (i=0; i<=x; i++){ 結果+=i; } (x > 100)の場合 終了(-1); 結果を返します。 }; void display(char* msg){ printf("%s\n",メッセージ); } int add(float a,float b){ a+b を返します。 } int sum_array(int 配列[], int 数値){ int i = 0、合計 = 0; (i=0; i<num; ++i) の場合 合計 += 配列[i]; 合計を返します。 } voidmodify_array(int配列[], int数値){ int i = 0、合計 = 0; (i=0; i<num; ++i) の場合 配列[i] *= 10; } メイン.c #include <stdio.h> #include <stdlib.h> int main(void){ 整数x; printf("整数を入力してください:\n"); scanf("%d", &x); printf("合計=%d\n", sum(x)); 0を返します。 }; 実行ファイルを生成する gcc -c main.c -o main.o gcc -c sum.c -o sum.o gcc 合計.o メイン.o メインの実行ファイルが生成されます ファイル main // ELF 64 ビット LSB 実行可能ファイル ファイル sum.o // ELF 64 ビット LSB 再配置可能 sum.cには再利用可能な関数が含まれているため、sum.cをダイナミックリンクライブラリにコンパイルしたい。 gcc sum.o -shared -o sum.so エラーが発生しました。
つまり、すべての .o ファイルをダイナミック リンク ライブラリにコンパイルできるわけではありません。.o ファイルを生成するときは、パラメータ -fPIC を追加する必要があります。 gcc -c sum.c -fPIC -o sum.o gcc sum.o -o 共有 sum.so 一般的に、共有ライブラリのコンパイルコマンドは(前回の実験) ダイナミック リンク ライブラリ gcc -shared -fPIC -o libmyhello.so hello.o gcc -o hello main.c -L. -lmyhello 静的リンク ar rcs libxx.a xx.o g++ -o main main.cpp -static -L. -lxx 現時点では g++ -o メイン main.c sum.so 。/主要 時々エラーが報告される
lddメイン 出力: sum.so => 見つかりません この時点で、 エクスポート $LD_LIBRARY_PATH=pwd:$LD_LIBRARY_PATH 注: -fPIC は .o を生成するときに使用され、-shared はダイナミック リンク ライブラリを生成するときに使用されます。 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
>>: phpmyadmin を使用して MySQL 権限を設定する方法
序文前回の記事では、JavaScript の 2 つのデータ型、基本型と参照型、および参照型の浅いコ...
これ以上時間を無駄にせず、早速本題に入りましょう。 1. ロゴに代替テキストを追加するこれには 2 ...
設定ファイルを書いてMyBatisを簡単に使う方法マイバティス3.xここでは MyBatis につい...
序文サーバーシステム環境は、CentOS 6.5 (最終) です。 FFmpeg をサーバーに正常に...
stat 関数と stat コマンドLinux ファイル内の [inode = インデックス ノード...
1. テーブル構造 2. 表データ 3. クエリのteacher_nameフィールドは空にすることは...
MacにはApache環境が付属していますターミナルを開き、sudo apachectl -v と入...
目次1. podmanの紹介2. Dockerと比較した利点3. 互換性4. バックグラウンド サー...
最近新しい会社に入社しました。プロジェクトに携わった後、タイトルアイコンが svg で作られていると...
この記事では、参考までにMySQLバックアップスクリプトを紹介します。具体的な内容は次のとおりです。...
目次NIS の紹介ネットワーク環境: 1. 環境の準備(両方のノードが必要) 2.nisマスターサー...
この記事では、Dockerを使用してMySQLデータベースとリモートアクセス構成をデプロイする方法を...
序文以前、画像とテキストの垂直方向のずれの問題について説明しました。ここで示した小さな例では、小さな...
目次1. MySQLをダウンロードする1.1 ダウンロード1.2 インストール1. MySQLをダウ...
序文プロジェクトのリリースでは、常に特定の状況に応じたパッケージ化が必要です。Angular CLI...