我一直在尝试制作一些全部依赖于相同库的应用程序,动态库是我的第一个想法:所以我开始编写“库”:
/* 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
然后我迅速写了一个使用Library的文件:
#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
我想我错过了一些非常明显的事情,请帮助我:)。
答案 0 :(得分:11)
-lfoo
在当前库路径中查找名为libfoo.a
(静态)或libfoo.so
(共享)的库,因此要创建库,您需要使用{{1} }
答案 1 :(得分:6)
您可以使用
g++ main.cpp -L. -l:ThinFS
使用“冒号”将原样使用库名称,而不需要前缀“lib”
答案 2 :(得分:3)
输出文件的名称应为 libThinFS.so ,例如
g++ -shared -fPIC FileSystem.cpp -o libThinFS.so
答案 3 :(得分:1)
g++ -shared -fPIC FileSystem.cpp
的结果不是目标文件,因此它不应以.o
结尾。此外,共享库应命名为libXXX.so
。重命名库,它将工作。
答案 4 :(得分:0)
查看这篇文章。
http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html
关于如何构建不同类型库的良好资源。它还描述了如何以及在何处使用它们。