Почему g ++ не связывается с динамической библиотекой, которую я создаю?

StackOverflow https://stackoverflow.com/questions/2001141

  •  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 библиотекаThinFS.итак

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top