2011-04-28 2 views
2

나는 당황합니다. - 내가 libssl에와 "아무것도"연결하지거야 - 결과가 libssl.so.4로 연결한다는 것을 /lib/libssl.so.4하고 여기에gcc 링커가 이전 버전의 공유 라이브러리를 선택하는 이유는 무엇입니까?

/lib/libssl.so.6가 옷을 벗었 최소한의 예입니다 : 내가/lib 디렉토리에 libssl.so의 2 개 버전이있다. 이것을 결정하는 것은 무엇입니까?

$ g++ -o foo.so -shared -lssl 

$ ldd foo.so |grep ssl 
libssl.so.4 => /lib/libssl.so.4 (0xf7f04000) 
+0

'/ lib/libssl.so' 또는'/ usr/lib/libssl.so'는'/ lib/libssl.so.4'에 대한 심볼릭 링크입니까? 또한 [이 질문] (http://stackoverflow.com/questions/3840218/how-to-specify-the-library-version-to-use-at-link-time)을 참조하십시오. – rlibby

+0

예, 정확합니다. /usr/lib/libssl.so는 /lib/libssl.so.4에 대한 심볼릭 링크입니다 (실제로 /lib/libssl.so.4 그 자체가 심볼릭 링크 인 실제 파일). Repointing 문제를 해결했다. –

답변

4

옵션 -lssllibssl.so 또는 libssl.a라는 이름의 파일을 찾도록 링커에 지시합니다. 가지고있는 것이 모두 libssl.so.4libssl.so.6이면 링커 오류가 발생합니다.

/lib에 라이브러리 디렉토리의 어딘가에 "libssl.so"라는 심볼릭 링크가 있는지 찾아보십시오.

+0

고마워, 나는 이것을 깨달았어야했다. 저를 던진 것은 libssl.so 심볼릭 링크가 실제 파일 (/ lib)과 동일한 디렉토리에있을 것으로 예상 했었지만 실제로/usr/lib에 있었고 물론 .so.4 버전을 가리키고있었습니다 in/lib. 그것을 반박하는 것이 해결책이었습니다. –

2

옵션 -lssllinker 라이브러리 이름을 찾습니다.이 경우 libssl.so입니다. 일반적으로 libssl.so는 soname 라이브러리를 가리키는 심볼릭 링크이거나 실제 링크가 수행 된 real 이름 라이브러리입니다. lib를 사용하는 버전을 수정하려면 libssl.so 심볼릭 링크를 사용해야합니다.

더 자세한 내용은 here을 참조하십시오.

+0

감사합니다. 정확합니다. 나는 이것과 @ Cubbi를 둘 다 선택한 답으로 표시하고 싶습니다.하지만 하나를 선택해야했습니다. –

관련 문제