정적 라이브러리를 공유 라이브러리로 변환 하시겠습니까?
-
19-08-2019 - |
문제
주로 다수의 정적으로 구성된 타사 라이브러리가 있습니다 (.a
) 라이브러리 파일. 이것을 단일로 컴파일 할 수 있습니다 .a
라이브러리 파일이지만 정말로 싱글이 필요합니다. .so
공유 라이브러리 파일.
정적을 변환하는 방법이 있습니까? .a
공유에 파일 .so
파일? 또는 더 일반적으로 수많은 정적을 결합하는 좋은 방법이 있습니까? .a
몇 가지 파일 .o
객체 파일 단일로 파일 .so
파일?
해결책
이것 (물론 적절한 -L)
gcc -shared -o megalib.so foo.o bar.o -la_static_lib -lb_static_lib
하지 않습니까?
다른 팁
정적 라이브러리 내의 객체가 -fpic 또는 좋아요없이 컴파일 된 경우에는 이렇게 할 수 없습니다.
g++ -shared -o megalib.so foo.o bar.o -Wl,--whole-archive -la_static_lib -lb_static_lib -Wl,--no-whole-archive -lc_static_lib -lother_shared_object
GCC에 대해서는 잘 모르겠지만 G ++의 경우 공유 객체에 정적 라이브러리의 객체를 포함시키기 위해 whole-archive 링커 옵션을 추가해야했습니다. libc_static_lib.a 및 libother_shared_object.a에 링크하려면-no-whole-archive 옵션이 필요하지만 megalib.so에 전체적으로 포함시키지 마십시오.
ar -x lib***.a
gcc -shared *.o -o lib***.so
ar -x
귀하의 특정 개체에 집중하려면 유용 할 수 있습니다. .a
S와 당신은 스스로 추가하고 싶지 않습니다.
예 :
ar -x lib***.a
gcc -shared *.o -o lib***.so
제휴하지 않습니다 StackOverflow