今私が見ることができるコマンドは -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