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 libThinFS.그래서

결과 g++ -shared -fPIC FileSystem.cpp 객체 파일이 아니므로 끝나지 않아야합니다. .o. 또한 공유 라이브러리의 이름을 지정해야합니다 libXXX.so. 라이브러리의 이름을 바꾸면 작동합니다.

이 기사를 확인하십시오.

http://www.yolinux.com/tutorials/libraryarchives-staticanddynamic.html

다양한 유형의 라이브러리를 구축하는 방법에 대한 좋은 리소스. 또한 사용 방법 및 위치를 설명합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top