문제

주로 다수의 정적으로 구성된 타사 라이브러리가 있습니다 (.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 귀하의 특정 개체에 집중하려면 유용 할 수 있습니다. .aS와 당신은 스스로 추가하고 싶지 않습니다.

예 :

ar -x lib***.a
gcc -shared *.o -o lib***.so
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top