通常のプログラムと比較すると、ダイナミック リンク ライブラリにはメイン関数がなく、一連の関数の実装です。共有および 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 権限を設定する方法
1. 関連する技術的なポイントバイト版ヴュー3 ts統合ルーティングvuexを統合するAxiosを統...
この記事では、Linux 環境の Apache で https サービスを有効にする方法について説明...
高可用性 Web クラスターを実現する Keepalived+Nginx+Tomcat 1. Ngi...
目次1. データベースエンジン1.1 ビューデータベースエンジン1.2 デフォルトのデータベースエン...
1. MySQL rpm パッケージのインストール # インストールソースをダウンロードします [r...
1. <select style="width:195px" name=&...
前回の記事では、Vue で画像の切り抜きや拡大・縮小、回転を実現する方法を紹介しました。今回は、アイ...
この記事では、例を使用して、MySQL 累積集計の原理と使用方法を説明します。ご参考までに、詳細は以...
目次1. nginxプロセスロックの役割2. エントリーレベルのロックの使用3. nginxプロセス...
目次前面に書かれたWC とは何でしょうか?現在の欠陥1. コンポーネント内部イベントのコールバック2...
<br />この世に道はない。より多くの人が歩くようになると、それは道になります。最初は...
目次1. html2Canvasをインストールする2. 必要なVueコンポーネントを導入する3. ス...
この記事では、アコーディオンを実装するためのjQueryの具体的なコードを参考までに紹介します。具体...
ソフトウェア パッケージが存在しない場合は、インストールされているソフトウェアのソフトウェア ソース...
計算されたプロパティ場合によっては、テンプレートにロジックを詰め込みすぎると、テンプレートが重くなり...