なぜ動的ライブラリとしませグラム++リンク私が作成していますか?
-
18-09-2019 - |
質問
私はすべてが同じライブラリに依存しているいくつかのアプリケーションを作成しようとしてきた、と動的ライブラリは、私が最初に考えた:だから私は、「ライブラリ」を書き始めます:
/* ThinFS.h */
class FileSystem {
public:
static void create_container(string file_name); //Creates a new container
};
/* ThinFS.cpp */
#include "ThinFS.h"
void FileSystem::create_container(string file_name) {
cout<<"Seems like I am going to create a new file called "<<file_name.c_str()<<endl;
}
私は、 "ライブラリ" をコンパイル
g++ -shared -fPIC FileSystem.cpp -o ThinFS.o
私はその後すぐにライブラリを使用してファイルを書きました
#include "ThinFS.h"
int main() {
FileSystem::create_container("foo");
return (42);
}
私はその後、
とのことをコンパイルしようとしましたg++ main.cpp -L. -lThinFS
しかし、それは次のエラーでコンパイルされません。
/usr/bin/ld: cannot find -lThinFS
collect2: ld returned 1 exit status
私は、私は非常に何かを明らかに不足していると思う、私を助けてください。)
解決
-lfoo
はそうあなたがlibfoo.a
を使用する必要があり、ライブラリを作成するには、現在のライブラリパスにライブラリーと呼ばれるlibfoo.so
(静的)またはg++ -shared -fPIC FileSystem.cpp -o libThinFS.so
(共有)を探します。
他のヒント
あなたが使用することができます。
g++ main.cpp -L. -l:ThinFS
そのまま「コロン」の使用は、「LIB」
の接頭辞を必要とし、むしろ、ライブラリ名を使用します。出力ファイルの名前は、例えば、のlibThinFS.soのである必要があります。
g++ -shared -fPIC FileSystem.cpp -o libThinFS.so
g++ -shared -fPIC FileSystem.cpp
の結果は、オブジェクト・ファイルではないので、.o
で終わるべきではありません。また、共有ライブラリがlibXXX.so
名前を付ける必要があります。ライブラリの名前を変更し、それが動作します。
この記事をチェックしてください。
http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html の
ライブラリのさまざまな種類を構築する方法についての優れたリソース。また、どこでどのようにそれらを使用することを説明しています。
所属していません StackOverflow