2016-11-28 10 views
1

C++ 프로젝트에서 GNU 다중 정밀도 (GMP) 라이브러리를 사용하려고합니다. 나는 (g++ project.cpp 사용) 내 코드를 컴파일 할 때 나는 다음과 같은 출력을 얻을 : 32 비트 및 64 비트 라이브러리 사이에 충돌이 같은 관련 질문을 읽는에서GMP 용 32 비트 및 64 비트 라이브러리 간의 충돌을 해결하려면 어떻게해야합니까?

Undefined symbols for architecture x86_64: 
"___gmpz_clears", referenced from: 
    _main in project-d867c2.o 
"___gmpz_inits", referenced from: 
    _main in project-d867c2.o 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

을 것 같습니다. 나는 이것에 관해 매우 많이 모른다.

이 충돌을 어떻게 해결할 수 있습니까?

+0

VS를 사용하고 있습니까? 그렇다면 프로젝트를 무엇으로 컴파일하고 있습니까? x64 또는 x86? –

+0

[게시하기 전에] (http://www.catb.org/~esr/faqs/smart-questions.html#before) 먼저 stackoverflow와 웹을 검색해야합니다. – MikeJRamsey56

+0

@ MikeJRamsey56 : 이해했습니다. 나는 슬프게도 많은 진전없이 Google 결과 및 stackoverflow 답변을 읽는 데 많은 시간을 쏟아 부었습니다.이 시점에서 내 자신의 질문을 가장 효율적으로 생각했습니다. – john

답변

0

일반적으로 32 비트 및 64 비트의 호환성에 관한 문제를 해결하는 옵션 중 하나는 라이브러리의 소스 코드를 직접 컴파일하는 것입니다. GMP에 대해 잘 모르지만 많은 C++ 라이브러리는 컴파일을 위해 CMAKE 나 Visual Studio 솔루션을 사용합니다.

는 GMP의 웹 사이트에, 나는 다운로드 섹션에서 찾을 :

대신 릴리스를 사용하는, 당신은 또한 GMP 저장소에서 최신 코드를 얻을 수 있습니다. 이것은 릴리스를 사용하는 것에 비해 더 많은 작업이 필요합니다. https://gmplib.org/devel/repo-usage.html

이 그것을 직접 컴파일에 대한 지침으로 나타납니다

은 여기서 끝나는 텍스트 "GMP 저장소 '에 대한 링크가 있습니다.

귀하의 경우 64 비트 프로젝트로 작업하고 있고 GMP 배포본이 32 비트 인 것으로 보입니다. 또 다른 솔루션은 여분의 리소스를 사용하지 않는 경우 프로젝트를 32 비트 프로젝트로 전환하는 것입니다. 경고 : 이렇게하면 코드가 손상 될 수 있습니다. 과도한 길이 또는 다른 OS 특정 함수 호출에 할당 된 배열은 64 비트 유형에 의존 할 수 있습니다.

+0

이 제안에 감사드립니다. 나는 전에 이런 접근법을 시도하지 않았지만 당신이 준 링크에서 지시 사항을 조사 할 것이다. – john

+0

@john 문제 없음. 행운을 빈다, 나는 올바른 바이너리를 얻는 것이 좌절 할 수 있다는 것을 안다. 나는 거의 자유를 얻으려고 죽었다 : P. 이 방법이 효과가 있다면 답변을 수락하는 것을 잊지 마십시오. 그렇지 않으면, LMK 의견과 함께, 나는 아마 당신에게 여기에서 늦게 이후 내일 당신에게 돌아갈 것이다. –

+0

감사합니다. 예 - 저는 여러 시간 동안 조사하고 다양한 수정을 시도하는 단계에 왔습니다. 이 시점에서 조금 실망 스럽지만 처음은 아닙니다! 어쨌든, 내일 받아 들일 것입니다. – john