Компиляция с помощью make приводит к ошибке: требуется динамическая переадресация R_X86_64_PC32.

Вопрос или проблема

Я совершенно новичок в C и Cmake, и я пытаюсь собрать программное обеспечение, которое я клонировал с Github (для своих исследований). Я использую cmake .., и всё собирается нормально, но когда я пытаюсь запустить make, я получаю

требуется динамическая R_X86_64_PC32 перенаправление против 

У меня нет идеи, что делать, и ни один поиск не был полезным. Я был бы признателен за очень простое объяснение и решение. Лучшие пожелания

Ответ или решение

Проблема, с которой вы столкнулись, связана с компиляцией кода C или C++ при использовании системы сборки make в среде x86_64 (64-битной архитектуре). Сообщение об ошибке "requires dynamic R_X86_64_PC32 reloc against" говорит о том, что во время компиляции пытаются создать динамическую ссылку, которая не согласуется с ожидаемой архитектурой.

Возможные причины и решения

  1. Неоднородные архитектуры:
    Убедитесь, что все зависимости и библиотеки, которые вы используете, соответствуют архитектуре x86_64. Если вы случайно скомпилировали некоторые части вашего проекта для 32-битной архитектуры (x86), это может вызвать проблемы. Чтобы исправить это, убедитесь, что вы используете компилятор и библиотеки для 64-битной архитектуры.

    Проверить архитектуру файлов можно с помощью команды:

    file <имя_файла>
  2. Обновление CMakeLists.txt:
    В вашем CMakeLists.txt убедитесь, что флаги компилятора установлены правильно. Например, добавьте следующее:

    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m64")

    Это заставит компилятор генерировать 64-битный код.

  3. Переустановка зависимостей:
    Если ваш проект зависит от сторонних библиотек, убедитесь, что они переустановлены и скомпилированы для 64-битной архитектуры. Используйте apt или аналогичный пакетный менеджер для их установки.

    Пример для Debian/Ubuntu:

    sudo apt-get install <название_библиотеки>:amd64
  4. Очистка сборки:
    После внесения изменений в CMakeLists.txt или библиотеки рекомендуется очистить папку сборки перед повторной попыткой. Для этого выполните:

    make clean
    rm -rf *

    Затем снова выполните:

    cmake ..
    make
  5. Использование системы пакетного менеджмента:
    Рассмотрите возможность использования таких инструментов, как vcpkg или Conan, для управления зависимостями и автоматической сборки библиотек под вашу архитектуру.

  6. Просмотр дополнительных логов:
    Проверьте вывод make на наличие других ошибок или предупреждений, которые могут указать на конкретные проблемы с кодом или конфигурацией. Это поможет лучше понять, что именно пошло не так.

Заключение

Разобравшись с описанными выше шагами, вы сможете справиться с ошибкой "requires dynamic R_X86_64_PC32 reloc against" и успешно собрать свой проект. Если после выполнения этих команд проблема все еще сохраняется, вы можете обратиться к документации проекта на GitHub или на специализированные форумы для получения дополнительной помощи. Удачи в вашей работе!

Оцените материал
Добавить комментарий

Капча загружается...