Вопрос или проблема
Я совершенно новичок в C и Cmake, и я пытаюсь собрать программное обеспечение, которое я клонировал с Github (для своих исследований). Я использую cmake .., и всё собирается нормально, но когда я пытаюсь запустить make, я получаю
требуется динамическая R_X86_64_PC32 перенаправление против
У меня нет идеи, что делать, и ни один поиск не был полезным. Я был бы признателен за очень простое объяснение и решение. Лучшие пожелания
Ответ или решение
Проблема, с которой вы столкнулись, связана с компиляцией кода C или C++ при использовании системы сборки make
в среде x86_64 (64-битной архитектуре). Сообщение об ошибке "requires dynamic R_X86_64_PC32 reloc against" говорит о том, что во время компиляции пытаются создать динамическую ссылку, которая не согласуется с ожидаемой архитектурой.
Возможные причины и решения
-
Неоднородные архитектуры:
Убедитесь, что все зависимости и библиотеки, которые вы используете, соответствуют архитектуре x86_64. Если вы случайно скомпилировали некоторые части вашего проекта для 32-битной архитектуры (x86), это может вызвать проблемы. Чтобы исправить это, убедитесь, что вы используете компилятор и библиотеки для 64-битной архитектуры.Проверить архитектуру файлов можно с помощью команды:
file <имя_файла>
-
Обновление CMakeLists.txt:
В вашемCMakeLists.txt
убедитесь, что флаги компилятора установлены правильно. Например, добавьте следующее:set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m64")
Это заставит компилятор генерировать 64-битный код.
-
Переустановка зависимостей:
Если ваш проект зависит от сторонних библиотек, убедитесь, что они переустановлены и скомпилированы для 64-битной архитектуры. Используйтеapt
или аналогичный пакетный менеджер для их установки.Пример для Debian/Ubuntu:
sudo apt-get install <название_библиотеки>:amd64
-
Очистка сборки:
После внесения изменений вCMakeLists.txt
или библиотеки рекомендуется очистить папку сборки перед повторной попыткой. Для этого выполните:make clean rm -rf *
Затем снова выполните:
cmake .. make
-
Использование системы пакетного менеджмента:
Рассмотрите возможность использования таких инструментов, какvcpkg
илиConan
, для управления зависимостями и автоматической сборки библиотек под вашу архитектуру. -
Просмотр дополнительных логов:
Проверьте выводmake
на наличие других ошибок или предупреждений, которые могут указать на конкретные проблемы с кодом или конфигурацией. Это поможет лучше понять, что именно пошло не так.
Заключение
Разобравшись с описанными выше шагами, вы сможете справиться с ошибкой "requires dynamic R_X86_64_PC32 reloc against" и успешно собрать свой проект. Если после выполнения этих команд проблема все еще сохраняется, вы можете обратиться к документации проекта на GitHub или на специализированные форумы для получения дополнительной помощи. Удачи в вашей работе!