2013-08-28 3 views
0

문제점을 설명해 드리겠습니다 : OpenCV libopencv_core.so를 사용하는 공유 라이브러리 libMyLib.so를 작성했습니다.NetBeans를 사용하는 Linux의 공유 라이브러리에서 두 번째 레벨 종속성 숨기기

내 라이브러리 (libMyLib.so)를 사용하는 응용 프로그램을 작성할 때 OpenCV 라이브러리 (즉, 암시 적 링크)의 사용을 숨기고 싶습니다.하지만 불가능합니다. libopencv_core.so에도 명시 적으로 링크해야합니다.

어떻게해야합니까? 가능한가요 아니면 그것을 숨기기 위해 OpenCV를 정적으로 내 라이브러리에 연결해야합니까?

NetBeans 7.3.1을 gcc 4.7.3 및 ld 2.23.2와 함께 사용하고 있습니다.

도움 주셔서 감사합니다.

답변

0

OpenCV 라이브러리를 정적으로 연결할 수 있어야합니다. 공유 라이브러리를로드하는 프로세스에서 OpenCV 라이브러리 심볼을 완전히 숨기려면 할 수있는 일이 많지 않다고 생각합니다. ld에 다음과 같은 옵션이 작동합니다 :

ld ... -static -lopencv_core -Bdynamic ... 

cc에서 호출하면, 그것은 다음과 같이 있다면 :

gcc ... -Wl,-static,-lopencv_core,-Bdynamic ... 

또 다른 가능성은 dlopen을 가진 라이브러리 (동적 로딩) 및 dlsym을 가진 찾아 기호를 사용하다(). 이것은 라이브러리 심볼의 나머지 부분을 감추기 위해 작용할 수 있습니다. 그 (것)들을위한 맨 페이지의 온라인 버전은 http://linux.die.net/man/3/dlopen이다.

+0

글쎄 내 문제에 대한 해결책은 OpenCV를 libopencv_core.a 등으로 정적으로 링크하여 캡슐화하는 것이 될 것이라고 생각한다. 문제는 아니지만 여전히 궁금하다. lib.so는 여전히 시스템 libs.so가 필요하다. 물론 그들에게 명시 적으로 링크 할 필요는 없습니다 ... ;-) –

+0

사실입니다. 기호를 숨기고 싶습니까? – ash

+0

예! 실제로 저는 OpenCV의 존재를 숨기고 싶습니다. 나는 그가 lib를 사용할 때 OpenCV에 대해 알고 있어야한다는 것을 알지 못한다. 당신의 대답을 읽고 조금 생각한 후에 저는 OpenCV를 정적으로 재구성 할 것이고 이런 방식으로 이런 라이브러리를 만들 것입니다. –

관련 문제