programing

정적 라이브러리를 공유 라이브러리로 변환하시겠습니까?

bestcode 2022. 8. 31. 22:44
반응형

정적 라이브러리를 공유 라이브러리로 변환하시겠습니까?

서드파티제 라이브러리는 주로 다수의 스태틱(static)으로 구성되어 있습니다..a) 라이브러리 파일입니다.이것을 하나로 정리할 수 있습니다..a라이브러리 파일입니다만, 정말 싱글로 만들어야 합니다..so공유 라이브러리 파일

스태틱을 변환하는 방법이 있습니까?.a공유에 줄세우기하다.so파일? 아니면 일반적으로 대량의 스태틱을 조합하는 좋은 방법이 있을까요?.a몇 개의 파일이 있는.o파일을 하나의 파일로 만들다.so파일링?

(물론 적절한 -L을 사용하여) 이 기능을 수행합니까?

gcc -shared -o megalib.so foo.o bar.o -la_static_lib -lb_static_lib

안 해?

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 링커 옵션을 추가하여 정적 라이브러리의 객체를 공유 객체에 포함시켜야 했습니다.--no-no-displays-displays 옵션은 libc_static_lib.a 및 libother_shared_object.so에 링크하는 경우 필요합니다.이러한 옵션은 megalib.so에 모두 포함되지 않습니다.

정적 라이브러리 내의 개체가 -fPIC 등을 사용하지 않고 컴파일된 경우에는 이 작업을 수행할 수 없습니다.

ar -x에서의 특정 오브젝트에 초점을 맞추고 싶은 경우에도 도움이 됩니다..a아무것도 추가하지 않는 것이 좋습니다.

예:

ar -x lib***.a
gcc -shared *.o -o lib***.so
ar -x lib***.a
gcc -shared *.o -o lib***.so

언급URL : https://stackoverflow.com/questions/655163/convert-a-static-library-to-a-shared-library

반응형