2017-12-18 1 views
0

libgcc_s_sjlj-1.dll에 의존하는 타사 라이브러리가 있습니다. 내 프로그램은 MSYS2 (mingw-w64)에서 컴파일되며 libgcc_s_dw2-1.dll에 의존합니다.Windows에서 컴파일러 + libgcc의 다른 버전이 발생했습니다

타사 라이브러리는 순수 바이너리 (소스 없음)입니다. 또한 libgcc_s_sjlj-1.dlllibgcc_s_dw2-1.dll은 모두 32 비트이므로 아키텍처와 관련된 문제는 아니라고 생각합니다.

결과는 명백합니다. libgcc_s_dw2-1.dll을 기반으로 컴파일 된 프로그램은 libgcc_s_sjlj-1.dll을 기반으로하는 타사 라이브러리에서 작동하지 않을 수 있습니다. 내가 얻는 것은 누락 된 진입 점 __gxx_personality_sj0입니다.

필자는 툴체인을 제 3 자의 libgcc_s_sjlj-1.dll과 일치 시키도록 조정할 수는 있지만, 그 작업을 수행하는 데 얼마나 많은 노력이 필요할지 모르겠다. 이 setjmp/longjmp 버전을 사용하여 MSYS2에서 libgcc dll과 같은 변종을 찾을 수 없습니다. MSYS2에서 가지고 있던 모든 바이너리가이 libgcc_s_dw2-1.dll 모듈 위에 있기 때문에 전체 툴 체인을 제거해야 할까 두렵다.

내 목표는 간단합니다. 내 코드가 libgcc_s_dw2-1.dll 대신 libgcc_s_sjlj-1.dll 위에 놓 이도록 솔루션을 찾고 싶습니다. 그러나 바보 같은 질문을하는 것이 단순히 가능하지 않기 때문에 단순히 묻는 지 모르겠습니다.

답변

1

dw2 및 sjlj는 GCC가 Windows에서 사용할 수있는 두 가지 유형의 예외 처리를 나타냅니다. 세부 사항을 모르지만 여러 유형을 사용하여 바이너리를 연결하려고하지는 않습니다. MSYS2는 sjlj 툴체인을 제공하지 않기 때문에, 다른 곳에서 하나를 찾아야합니다. 나는 당신이이 페이지에 찾을 수있다 "는 MinGW-W64-구축"프로젝트에서 하나를 다운로드하는 것이 좋습니다 :

https://mingw-w64.org/doku.php/download

당신은 배쉬 쉘로 MSYS2를 사용할 수 있지만, 당신은 아마 어떤에 링크 할 수 없습니다 귀하의 프로그램에서 도서관의 모든 라이브러리를 직접 다시 컴파일해야합니다 (닫힌 소스 타사 라이브러리는 제외).

관련 문제