2016-11-28 8 views
1

Я пытаюсь использовать библиотеку GNU Multiple Precision (GMP) в проекте на C++. Когда я пытаюсь скомпилировать мой код (с помощью g++ project.cpp) Я получаю следующий вывод:Как разрешить конфликт между 32-битными и 64-разрядными библиотеками для GMP?

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) 

От чтения родственных вопросов, похоже, есть какой-то конфликт между 32-битной и 64-битными библиотеками. Однако я не очень-то знаю об этом.

Как я могу разрешить этот конфликт?

+0

Вы используете VS? Если да, то компилируете проект как? x64 или x86? –

+0

[Перед публикацией] (http://www.catb.org/~esr/faqs/smart-questions.html#before) сначала необходимо выполнить поиск в стеке и в Интернете. – MikeJRamsey56

+0

@ MikeJRamsey56: понимается. Я нахожусь в том месте, где я поторопил несколько часов на чтение результатов Google и ответы на stackoverflow, к сожалению, без особого прогресса - считал наиболее эффективным задавать мой собственный вопрос на этом этапе. – john

ответ

0

Один из вариантов в целом для решения проблем, связанных с 32-разрядной и 64-разрядной совместимостью, заключается в том, чтобы самостоятельно собрать исходный код библиотеки. Хотя я ничего не знаю о GMP, многие библиотеки C++ используют решения CMAKE или Visual Studio для компиляции.

На сайте GMP, я нашел в разделе загрузки:

Вместо того, чтобы использовать релиз, вы также можете получить последнюю версию кода из GMP хранилищ. Это потребует еще нескольких работ по сравнению с использованием выпуска .

Существует связь на текст «GMP хранилищ», что заканчивается здесь: https://gmplib.org/devel/repo-usage.html

Это, как представляется, инструкции по составлению его самостоятельно.

В вашем случае кажется, что вы работаете с 64-разрядным проектом, а ваш дистрибутив GMP - 32 бит. Другое решение - просто переключить проект на 32-битный проект, если вы не используете дополнительные ресурсы. Будьте предупреждены: если вы это сделаете, вы можете сломать свой код. Массивы, выделенные для чрезмерной длины или другие вызовы функций конкретной ОС, могут основываться на 64-битном типе.

+0

Спасибо за это предложение Ashwin. Раньше я не пробовал такой подход, но я рассмотрю инструкции по этой ссылке. – john

+0

@john проблем нет. Удачи, я знаю, что получение правильного бинарного файла может быть разочаровывающим. Я чуть не умер, пытаясь получить freeGLUT: P. Если это работает, не забудьте принять ответ. В противном случае, LMK с комментарием, я, вероятно, вернусь к вам завтра, но с тех пор, как здесь поздно. –

+0

спасибо. Да. Я нахожусь на том этапе, когда я погрузил несколько часов в поиск и исправление различных исправлений. На данный момент это немного расстраивает, но это уже не первый раз! В любом случае, я буду принимать или комментировать завтра. – john

 Смежные вопросы

  • Нет связанных вопросов^_^