GNU/Linux >> Linux の 問題 >  >> Linux

g ++コンパイルを介して.soファイルを.cppファイルにリンクします

<ブロック引用>

今私が見ることができるコマンドは -l + filename です 、たとえば、私のファイル名は directory/libtest.so です -ldirectory/libtest.so になります

いいえ、それは正しくありません。 -Ldirectory -ltest である必要があります つまり、-L を使用します リンカーがライブラリを探す検索パスにディレクトリを追加するには、-l でリンクするライブラリを指定します。 、しかし libtest.so にリンクするには または libtest.a あなたは -ltest と言います lib なし プレフィックスまたはファイル拡張子。

できます -L なしで、明示的にファイル名を付けてリンクします または -l オプション、つまり directory/libtest.so のみ 、しかし、動的ライブラリの場合、実行可能ファイルにその正確なパスを埋め込むため、ほとんどの場合、これは間違ったことです。そのため、プログラムの実行時に同じライブラリが同じ場所にある必要があります。通常、実行時にその名前のライブラリを任意の場所から使用できるように、(パスではなく) 名前でリンクします。


これは、.so を作成して .cpp ファイルとリンクする方法の段階的な手順です

<オール>
  • .so に変換する .cpp ファイルを作成します。
    例 -
    #include<stdio.h> int add(int a , int b) { return a+b;}

    <ブロック引用>

    add.cpp という名前で保存します

  • 次のコマンドで .so を作成します
    gcc -c -fPIC add.cpp -o add.o

    <ブロック引用>

    これにより libadd.so が作成されます

  • この .so ファイルを使用する .cpp ファイルを作成します
    例-
    #include<stdio.h> extern int add(int a, int b); int main(int argc, char** argv) { printf("Hello the output is %d \n",add(10,15)); return 0; }

    <ブロック引用>

    main_file.cpp として保存します

  • このコマンドを使用して、このファイルから .o ファイルを作成します
    g++ -c main_file.cpp

  • このコマンドを使用して .o と .so をリンクします
    g++ -o prog main_file.o -L. -ladd

    <ブロック引用>

    ここで、L は .so ファイルのあるフォルダーを指定します
    -l は .so ライブラリの名前を指定します

  • コマンドでプログラムを実行します
    ./prog


  • Linux
    1. WordPress でファイルへのリンクを挿入する方法

    2. grep でテキスト ファイルの空行を削除する

    3. コンパイル時に「SDL.h no such file or directory found」

    1. Pleskファイルマネージャでファイルを作成する方法

    2. .htaccessファイルを介したアクセスのブロック

    3. netcat 経由でファイルを送信する

    1. Linuxのハードリンクとソフトリンクの説明

    2. ハード リンクの作成が役立つのはどのような場合ですか?

    3. ファイルを移動してソフト リンクを残す