Почему g ++ не связывается с динамической библиотекой, которую я создаю? - PullRequest
6 голосов
/ 04 января 2010

Я пытался создать несколько приложений, основанных на одной и той же библиотеке, и динамические библиотеки были моей первой мыслью: поэтому я начал писать «Библиотеку»:

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

Я думаю, что я упускаю что-то очень очевидное, пожалуйста, помогите мне:)

Ответы [ 5 ]

11 голосов
/ 04 января 2010

-lfoo ищет библиотеку с именем libfoo.a (статическая) или libfoo.so (общая) в текущем пути к библиотеке, поэтому для создания библиотеки необходимо использовать g++ -shared -fPIC FileSystem.cpp -o libThinFS.so

6 голосов
/ 16 мая 2012

Вы можете использовать

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

Использование «двоеточия» будет использовать имя библиотеки в том виде, как оно есть, скорее всего, требуется префикс «lib»

3 голосов
/ 04 января 2010

имя выходного файла должно быть libThinFS.so , например,

g++ -shared -fPIC FileSystem.cpp -o <b>lib</b>ThinFS.<b>so</b>
1 голос
/ 04 января 2010

Результат g++ -shared -fPIC FileSystem.cpp не является объектным файлом, поэтому он не должен заканчиваться на .o. Также разделяемые библиотеки должны иметь имя libXXX.so. Переименуйте библиотеку, и она будет работать.

0 голосов
/ 04 января 2010

Ознакомьтесь с этой статьей.

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

Хороший ресурс о том, как создавать различные типы библиотек. Также описано, как и где их использовать.

...