2012-02-24 4 views
1

Visual Studio 2010에서 내 프로젝트에 Windows 용으로 CGAL을 빌드하려고합니다. CGAL은 GMPMPFR 라이브러리가 필요하며 배포시이를 제공합니다. 그러나 lib + dll 번들로 제공하며 정적 .lib 파일 형태로 정적으로 컴파일되기를 원합니다.cygwin을 사용하는 Windows 용 정적 라이브러리 빌드

이제 GMP와 MPFR을 Windows에서 정적 라이브러리로 빌드하려고합니다. 나는 here 제안 된이 목적을 위해 cygwin 사용하고 있습니다. configuremake을 호출 한 후 .a 확장자를 가진 libs를 추가 .la 파일과 함께 출력했습니다. 저는 유닉스 용 정적 라이브러리에 대해서는 잘 모릅니다. 그래서 다른 확장자를 가진 .lib과 같다고 제안했습니다. 나는 .lib로 이름을 바꾸고 프로젝트에 링크했다. 잘 맞았다.

첫 번째 질문 : 맞습니까? .a 및 .lib 파일이 실제로 동일합니까? 나는 this 질문을 보았지만 충분히 유용하지 않았다.

는 그런 문제는 발생 : 나는
error LNK2019: unresolved external symbol ___getreent referenced in function ___gmp_default_reallocate 

일부 Cygwin에서 기능 gmp.lib을 발생에 연결되지 않은 것 같다

했다. here을 찾았다면 에서 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를 올바르게 빌드하는 방법은 무엇입니까?

답변

1

업데이트 : 모든 문제에 대한 답변은 MPIR project page을 참조하십시오 (MPIR, GMP 호환 라이브러리 및 Visual Studio와 MPFR을 빌드 할 수 있습니다). 새로운 MPIR 홈페이지는 here이지만 MPFR 정보가 부족합니다.


Cygwin을 원하지 않습니다.

Bash 쉘과 MinGW (.org/-w64)가 필요합니다. cygwin 컴파일러로 빌드한다면 Cygwin DLL에 연결해야합니다. Cygwin DLL은 GMP와 MPFR이 둘 다 MinGW에서 빌드 가능하므로 바보입니다.

유일한 것은 : 어느 라이브러리도 MSVC에서 빌드 가능하고 MSVC가 MinGW 라이브러리와 링크 할 수 없다고 생각합니다. 이것이 프로젝트 작성자가 DLL과 가져 오기 라이브러리를 번들로 묶은 이유입니다. MinGW GCC로 모든 것을 만들거나 DLL을 사용해야합니다.


다음은 GMP 및 MPFR의 GCC 정적 라이브러리를 구축하기위한 지침입니다.

MinGW-w64 GCC가 포함 된 Windows 용 GMP를 빌드하려면 MSYS이 필요합니다. C : \ Dev \ msys \ bin \ sh와 같이 C : \ Dev \ msys와 같은 압축 파일을 압축 해제하십시오.exe가 존재합니다. 64-bit

  • 32-bit
  • (나는 내 ​​"개인 빌드"특히 4.6.3-1 패키지를 권장합니다

    그런 다음 당신은는 MinGW-W64의 GCC가 필요합니다. 4.6.3-1-gcc_rubenvb.7z 패키지를 다운로드하지만, 말을하면 다른는 MinGW 번들)이 대한

    압축 풀기를 수행해야합니다 C : \ 데브 \ mingw64 그 C 그렇게 : \ 데브 \ mingw64 \ B in \ gcc.exe가 존재합니다.

    C : \ Dev \ msys \ msys.bat를 두 번 클릭하십시오. 유형 :

    export PATH=/c/Dev/mingw64/bin:$PATH 
    

    를 입력하고 Enter 키를 누릅니다.

    --enable-static --disable-shared --prefix=/easytemplibinstalldir 
    

    함께

    --host=i686-w64-mingw32 
    

    32 비트 또는

    과 : 디렉토리를 구축 할 수 있도록하고, 구성에 사용할 기억, 당신의/홈/사용자 이름/* 디렉토리에 GMP 및 MPFR 소스의 압축을 풉니 다 64 비트

    --host=x86_64-w64-mingw32 
    

    . 나는 GMP가 --build을 같은 값으로 설정하도록 요구한다고 믿는다. 구성 완료 후 make을 입력 한 다음 make install을 입력하고 선택적으로 앞에 make check을 입력하십시오.

    /easytemplibinstalldir/lib에 libgmp.a가 있어야합니다. MPFR를 들어, 그 구성 라인에

    --with-gmp=/easytemplibinstalldir 
    

    를 추가합니다.

    올바른 순서로 libgmp와 libmpfr을 모두 수동으로 연결해야합니다.이 경우 자동 종속성 링크가 가능하지 않습니다.

+0

MSVC (또는 무엇이든)가 .Lib을 MinGW (또는 누구든지)와 연결하지 못하는 이유는 무엇입니까? 비록 .lib 컴파일러 독립적입니다. – Mikhail

+0

@Mikhail 오, 아니에요. MinGW GCC는'.a' 파일을 생성하고'.lib'는 생성하지 않습니다. MSVC는 GCC의 출력 형식에 상관하지 않습니다. 왜 링크 할 수 있습니까? 반면에 GCC는 MSVC가 만든 32 비트'.lib' 파일에 연결할 수 있습니다. 왜냐하면 일부 GCC/binutils dev은 전혀 가능하도록 신경을 썼기 때문입니다. – rubenvb

+0

그래서 현재 Windows에서 정적 .lib에 GMP를 빌드하는 방법이 있다는 뜻입니까? 그건 꽤 혼란 스럽네요. Cygwin에서 제작 한 gmp.a 파일과 MSVC를 연결할 수있는 이유는 무엇입니까? – Mikhail

관련 문제