Visual Studio 2010에서 내 프로젝트에 Windows 용으로 CGAL을 빌드하려고합니다. CGAL은 GMP 및 MPFR 라이브러리가 필요하며 배포시이를 제공합니다. 그러나 lib + dll 번들로 제공하며 정적 .lib 파일 형태로 정적으로 컴파일되기를 원합니다.cygwin을 사용하는 Windows 용 정적 라이브러리 빌드
이제 GMP와 MPFR을 Windows에서 정적 라이브러리로 빌드하려고합니다. 나는 here 제안 된이 목적을 위해 cygwin 사용하고 있습니다. configure
및 make
을 호출 한 후 .a
확장자를 가진 libs를 추가 .la
파일과 함께 출력했습니다. 저는 유닉스 용 정적 라이브러리에 대해서는 잘 모릅니다. 그래서 다른 확장자를 가진 .lib
과 같다고 제안했습니다. 나는 .lib로 이름을 바꾸고 프로젝트에 링크했다. 잘 맞았다.
첫 번째 질문 : 맞습니까? .a 및 .lib 파일이 실제로 동일합니까? 나는 this 질문을 보았지만 충분히 유용하지 않았다.
는 그런 문제는 발생 : 나는error LNK2019: unresolved external symbol ___getreent referenced in function ___gmp_default_reallocate
일부 Cygwin에서 기능 gmp.lib
을 발생에 연결되지 않은 것 같다
getreent
을 내보낼 수 있습니다. 그래서 그것을
libcygwin.lib
에 복사하고 내 프로젝트에 연결했습니다. 물론
error LNK2005: _strcpy already defined in libcygwin.lib(t-d001719.o) in libcmtd.lib(strcat.obj)
, 나는이 라이브러리에 선언 및 Visual Studio에서 하나와 충돌 strcpy
것 같아 무슨 기능 및 방법을 알 수 없습니다 : 당연히, 나는 다음과 같은 오류가 발생했습니다. 내가 실제로하고 싶은 것은 gmp.lib
이 함수를 정적으로 연결할만큼 똑똑 할 것입니다. 그래서,
두 번째 질문 : GMP가 라이브러리 종속성을 어떻게 강제로 연결합니까? 또는 cygwin을 사용하지 않고 Windows 용 GMP를 올바르게 빌드하는 방법은 무엇입니까?
MSVC (또는 무엇이든)가 .Lib을 MinGW (또는 누구든지)와 연결하지 못하는 이유는 무엇입니까? 비록 .lib 컴파일러 독립적입니다. – Mikhail
@Mikhail 오, 아니에요. MinGW GCC는'.a' 파일을 생성하고'.lib'는 생성하지 않습니다. MSVC는 GCC의 출력 형식에 상관하지 않습니다. 왜 링크 할 수 있습니까? 반면에 GCC는 MSVC가 만든 32 비트'.lib' 파일에 연결할 수 있습니다. 왜냐하면 일부 GCC/binutils dev은 전혀 가능하도록 신경을 썼기 때문입니다. – rubenvb
그래서 현재 Windows에서 정적 .lib에 GMP를 빌드하는 방법이 있다는 뜻입니까? 그건 꽤 혼란 스럽네요. Cygwin에서 제작 한 gmp.a 파일과 MSVC를 연결할 수있는 이유는 무엇입니까? – Mikhail