通常のプログラムと比較すると、ダイナミック リンク ライブラリにはメイン関数がなく、一連の関数の実装です。共有および 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 権限を設定する方法
win10 + Ubuntu 20.04 LTS デュアルシステムインストール (UEFI + GP...
この記事では、例を使用して MySQL の重複インデックスと冗長インデックスについて説明します。ご参...
この記事ではMySQL 5.7.21のインストールと設定方法を記録しています。具体的な内容は以下のと...
最近ブログに書いたのですが、プロジェクトリストの中に写真がたくさんあり、最初は読み込みが遅いので、ス...
animation-name アニメーション名。複数のアニメーションがバインドされていることを示す...
環境変数の設定の簡単な説明プログラムは、環境によって異なる環境変数を必要とします。たとえば、実稼働環...
RocketMQ イメージを検索するには、Docker の hub.docker.com で検索する...
背景最近、オンライン操作中に DML ステートメントを実行しました。これは絶対確実だと思っていました...
1. インストール方法は? 1. [実行] -> [cmd] と入力して、小さな黒いウィンドウ...
目次1. バブルソートとは何か2. 例を挙げるラウンド1:第2ラウンド:第3ラウンド:第4ラウンド:...
本来、この第 7 章では、デザインにおけるレイヤーと空間テクニックについて深く議論するはずです。しか...
ネットでいろいろ検索してみたところ、Linux システム向けではなく、現在の新しいバージョンと一致し...
序文: MySQL で SQL 文を実行すると、予想した時間内に文が完了しません。このような場合、通...
同僚から、MySQL データ型 DECIMAL(N,M) の N と M の意味を尋ねられました。言...
自動プロジェクト展開は大企業やユニコーン企業でよく使用され、手動でプロジェクトを展開するよりも効率的...