C++ 为什么';t g++;链接到我创建的动态库?

C++ 为什么';t g++;链接到我创建的动态库?,c++,g++,dynamic-linking,ld,C++,G++,Dynamic Linking,Ld,我一直在尝试制作一些完全依赖于同一个库的应用程序,而动态库是我的第一个想法:因此我开始编写“库”: 然后,我快速编写了一个使用该库的文件: /* ThinFS.h */ class FileSystem { public: static void create_container(string file_name); //Creates a new container }; /* ThinFS.cpp */ #include "ThinFS.h" void FileSystem::

我一直在尝试制作一些完全依赖于同一个库的应用程序,而动态库是我的第一个想法:因此我开始编写“库”:

然后,我快速编写了一个使用该库的文件:

/* 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;
}
#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

我想我遗漏了一些非常明显的东西,请帮助我:)

输出文件的名称应该是libThinFS

g++ -shared -fPIC FileSystem.cpp -o libThinFS.so g++-shared-fPIC FileSystem.cpp-o libThinFS.so
g++-shared-fPIC FileSystem.cpp
的结果不是一个目标文件,因此它不应该以
.o
结尾。此外,共享库应命名为
libXXX.so
。重命名库,它就会工作。

-lfoo
在当前库路径中查找名为
libfoo.a
(静态)或
libfoo.so
(共享)的库,因此要创建库,需要使用
g++-shared-fPIC FileSystem.cpp-o libThinFS。因此
请查看本文

一个关于如何建立不同类型的图书馆的好资源。它还描述了如何以及在何处使用它们

您可以使用

g++ main.cpp -L. -l:ThinFS 

使用“冒号”将按原样使用库名,而不是要求前缀“lib”

谢谢,前面缺少lib(.o而不是.so只是一个输入错误):)
g++ main.cpp -L. -l:ThinFS