2016-10-31 25 views
2

GCC 6 (MinGW)로 빌드 된 정적 라이브러리 (.lib)에 링크되는 Windows 실행 프로젝트가 있습니다. 다음 컴파일 과정에서 오류가 발생합니다GCC 내장 정적 라이브러리에 연결할 때 MSVC 프로젝트에 "__popcountdi2"가 누락되었습니다.

LNK2019 unresolved external symbol __popcountdi2 referenced in function ... 

기호가 관하여 libgcc에 상주하는 GCC 내장 함수 __builtin_popcount()를 사용한 결과로 연결되어 있습니다. 그러나 -static-libgcc을 gcc에 인수로 추가 했음에도 불구하고 문제는 계속 발생합니다.

내 라이브러리 (.lib)가 링크 된 실행 파일을 위해 libgcc가 시스템에 있어야하는 대신 libgcc의 일부를 포함 할 수있는 방법이 있습니까? libgcc로 라이브러리를 출하 할 필요가 있습니까?

__builtin_popcount()은 현재 내가 사용하는 유일한 내장 기능이 아닙니다. 라이브러리는 __builtin_bswap32()을 사용하며이 문제는 해결되지 않습니다.

GCC 6.1.0을 사용하고 있습니다. 6.2.0으로 업데이트되었습니다. 같은 문제.

답변

0

-march=native이 전달되었을 때 MinGW (GCC)가 현재 CPU 아키텍처를 제대로 감지하지 못했습니다. 원래 명령어 (아마도 i686)로 POPCNT를 지원하지 않는 아키텍처로 떨어지고있었습니다. 테스트로 -mpopcnt이 빌드에 추가되었고 모든 것이 잘 동작했습니다.

해결 방법은 수동으로 -march=을 사용하여 아키텍처를 지정하는 것입니다.

기타 : 네이티브 아키텍처가 제대로 폴링되지 않았으므로 MingGW의 버그입니까?