programing

링크할 때 정적 및 공유 객체 라이브러리를 혼재시킬 수 있습니까?

randomtip 2022. 7. 21. 21:55
반응형

링크할 때 정적 및 공유 객체 라이브러리를 혼재시킬 수 있습니까?

10개의 실행 파일을 생성하는 C 프로젝트가 있는데, 모두 정적으로 링크하고 싶습니다.이러한 실행 파일 중 하나가 공유 객체 버전만 사용할 수 있는 서드파티 라이브러리를 사용한다는 문제가 있습니다.

합격하면-staticgcc에 플래그를 붙이면 ld는 문제의 라이브러리를 찾을 수 없다는 오류(.a 버전을 찾고 있을 것으로 추측)가 발생하고 실행 파일이 빌드되지 않습니다.이상적으로는 가능한 한 정적으로 링크하여 정적 라이브러리를 찾을 수 없는 경우 공유 객체 라이브러리로 페일오버하도록 'ld'에게 지시할 수 있습니다.

중간 휴식 시간에 나는 다음과 같은 것을 시도했다.gcc -static -lib1 -lib2 -shared -lib3rdparty foo.c -o foo.exelib1과 lib2에서 'ld'가 정적으로 링크되지만 lib3dparty에 대한 런타임 의존만 있을 수 있습니다.불행하게도, 이것은 내가 의도한 대로 작동하지 않았다; 대신,-shared과장해서 말하다-staticflag를 지정하면 모든 것이 shared-parames로 컴파일됩니다.

정적으로 모든 거래를 링크하고 있습니까?아니면 조합할 수 있는 방법이 있습니까?

스레드를 보면 할 수 있다는 것을 알 수 있습니다.GNU에 있는 사람들은

gcc foo.c -Wl,-Bstatic -lbar -lbaz -lqux -Wl,-Bdynamic -lcorge -o foo.exe

언급URL : https://stackoverflow.com/questions/2954387/can-i-mix-static-and-shared-object-libraries-when-linking

반응형