7

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

/* 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

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

4

5 回答 5

13

-lfoo在当前库路径中查找名为libfoo.a(static) 或libfoo.so(shared) 的库,因此要创建库,您需要使用g++ -shared -fPIC FileSystem.cpp -o libThinFS.so

于 2010-01-04T18:15:14.697 回答
6

您可以使用

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

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

于 2012-05-16T08:19:34.367 回答
3

输出文件的名称应该是libThinFS.so,例如

g++ -shared -fPIC FileSystem.cpp -o lib ThinFS。所以
于 2010-01-04T18:14:24.930 回答
2

的结果g++ -shared -fPIC FileSystem.cpp不是目标文件,因此不应以.o. 此外,共享库应命名为libXXX.so. 重命名库,它将起作用。

于 2010-01-04T18:15:06.710 回答
0

看看这篇文章。

http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html

关于如何构建不同类型库的好资源。它还描述了如何以及在何处使用它们。

于 2010-01-04T19:18:32.277 回答