2017-10-27 1 views
-1

나는 다음과 같은 파일이 있습니다사용자 정의 공유 라이브러리도 찾을 수 없습니다

. 
├── combinatorics 
│   ├── permutation.cpp 
│   └── permutation.h 
├── main.cpp 
└── math 
    ├── basic.cpp 
    └── basic.h 

을 다음 단계 수행하여 공유 라이브러리를 만들기 위해 노력하고 있어요 :

g++ -c -Wall -std=c++14 -fpic combinatorics/permutation.cpp -o permutations.o 
g++ -c -Wall -std=c++14 -fpic math/basic.cpp -o mathbasic.o 
g++ -shared -o combmath.so permutations.o mathbasic.o 
g++ -Wall -std=c++14 main.cpp -L. -o output -lcombmath 

하지만 나는를 다음 메시지가 나타납니다.

/usr/bin/ld: cannot find -lcombmath 
collect2: error: ld returned 1 exit status 

내가 뭘 잘못하고 있니?

+0

현재 디렉토리에서 -L을 사용하여 검색합니다. 그래서 왜 아직도 그것을 찾지 못하는지 묻는 이유가 무엇입니까, 나는 downvote – ArmenB

+0

'-lpermutations'가 여러분의 명령 목록에 왜 나타나는지 모르겠습니다. 오류 메시지에만 나타납니다. – jww

+0

잘못된 명령을 붙여 넣었습니다. 감사합니다. 아래 표를 제거해 주시겠습니까? – ArmenB

답변

0

링키지 옵션 -lfoo 때 중지 링커의 기본 검색 디렉토리에 다음 지정된 링커 검색 디렉토리에있는 파일 libfoo.so (공유 라이브러리) 또는 libfoo.a (정적 라이브러리) (-L/x/y/z)를 검색하고 링커 지시 해당 파일 중 하나를 찾은 다음 이 동일한 디렉토리에서 두 파일을 찾으면 libfoo.so을 선호합니다. 당신 같이

g++ -shared -o libcombmath.so permutations.o mathbasic.o 

하지 combmath.so를 구축 :

g++ -Wall -std=c++14 main.cpp -L. -o output -lcombmath 

따라서, 명령과 같은 디렉토리에 libcombmath.so 을 구축하기 이전에해야 성공 : 당신의 연결을 위해

명령을 사용하여 완료했습니다 :

g++ -shared -o combmath.so permutations.o mathbasic.o 
+0

그래서 lib 접두사를 추가해야합니다. – ArmenB

관련 문제