2009-03-21 3 views
0

"libeval.so"라고하는 공유 라이브러리가 있습니다. 필자는이 프로젝트를 사용하여 "lidpi.so"라는 더 많은 공유 라이브러리를 만들었습니다. "libdpi.so"라는 라이브러리는 도구에서 사용됩니다. 이제이 도구는 "libdpi.so"가 아닌 다른 라이브러리를 볼 수 없습니다. "libeval.so"에있는 함수 호출을 거의 사용하지 않고 있으며 "libdpi.so"에 없습니다. gcc에 스위치가 있거나이를 극복 할 수있는 스위치가 있습니까?리눅스의 다른 라이브러리를 사용하여 공유 라이브러리 생성하기

+1

: 같이, GCC와 함께 -fPIC 명령 인수를 사용하면 개체를 빌드 할 때 :

gcc -shared -o libdpi.so [list of object files to go in libdpi.so] 

주 :이 명령을 사용하여 공유 라이브러리를 빌드하려면 나는 아무 문제도 전혀 기대하지 않을 것이다. 도구는 libpi에 링크 할 것이고, libpi가 독자적으로 다른 라이브러리를 필요로한다면 런타임 자체에서로드하는 것에 신경을 쓸 것입니다. 도구는 신경 쓰지 않아야합니다. –

답변

2

libeval.so을 열 수 있도록 libdpi.so이 설계된 경우 프로그램은 libdpi.so에 대해서만 알아야합니다. libdpi.so에서

dlopen("path/to/libdpi.so", RTLD_LAZY); 

그리고 다른 기능 libeval.so와 인터페이스 할 수 있습니다 특히

, libdpi.so은 아마 다음과 같이 dlopen를 호출 일부 기능이 있어야합니다.

편집는 :

gcc -fPIC -o foo.o foo.c 
+0

libdpi.so가 어떻게 생성되었는지 잘 모르겠습니다. ( – Alphaneo

+0

안녕하세요, 다음 옵션이 작동하는 것 같습니다 :) gcc -fPIC $ (ALL_OBJ) $ (ALL_PATH) -level -shared -o libdpi.so 설명을 찾으십시오 :) 나는 또한 당신의 제안에 대한 연구를했습니다. 라이브러리를로드하는 것은 아마도 좋은 방법 일 것입니다. – Alphaneo

관련 문제