G ++가 내가 만든 동적 라이브러리와 링크하지 않는 이유는 무엇입니까?
-
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
다양한 유형의 라이브러리를 구축하는 방법에 대한 좋은 리소스. 또한 사용 방법 및 위치를 설명합니다.