반응형
링크할 때 정적 및 공유 객체 라이브러리를 혼재시킬 수 있습니까?
10개의 실행 파일을 생성하는 C 프로젝트가 있는데, 모두 정적으로 링크하고 싶습니다.이러한 실행 파일 중 하나가 공유 객체 버전만 사용할 수 있는 서드파티 라이브러리를 사용한다는 문제가 있습니다.
합격하면-static
gcc에 플래그를 붙이면 ld는 문제의 라이브러리를 찾을 수 없다는 오류(.a 버전을 찾고 있을 것으로 추측)가 발생하고 실행 파일이 빌드되지 않습니다.이상적으로는 가능한 한 정적으로 링크하여 정적 라이브러리를 찾을 수 없는 경우 공유 객체 라이브러리로 페일오버하도록 'ld'에게 지시할 수 있습니다.
중간 휴식 시간에 나는 다음과 같은 것을 시도했다.gcc -static -lib1 -lib2 -shared -lib3rdparty foo.c -o foo.exe
lib1과 lib2에서 'ld'가 정적으로 링크되지만 lib3dparty에 대한 런타임 의존만 있을 수 있습니다.불행하게도, 이것은 내가 의도한 대로 작동하지 않았다; 대신,-shared
과장해서 말하다-static
flag를 지정하면 모든 것이 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
반응형
'programing' 카테고리의 다른 글
비트 연산자의 전력 모드 2? (0) | 2022.07.21 |
---|---|
VueX에서 지속적인 상태 잠금 방지 (0) | 2022.07.21 |
Docker 컨테이너 localhost에 vue-cli 시작 페이지를 실행하는:.이 사이트에 도달할 수 없습니다. (0) | 2022.07.21 |
GetLastError()에 의해 반환된 오류 코드에서 오류 메시지를 얻는 방법 (0) | 2022.07.21 |
Laravel 및 Vuejs에서 액세스할 수 있도록 글로벌 변수를 설정하려면 어떻게 해야 합니까? (0) | 2022.07.21 |