Подтвердить что ты не робот

Передача gcc-флага через make файл

Я пытаюсь создать проход, используя llvm, и я закончил создание llvm и связанных с ним компонентов. Однако, когда я запускаю make после выполнения всех шагов для создания прохода, включая makefile, я получаю следующее

перемещение R_X86_64_32 против "локального символа" не может использоваться при создании общего объекта; перекомпилировать с помощью -fPIC

После tyring, чтобы найти исправление, отправив сообщение об ошибке в сообщение об ошибке, я узнал, что это не относится к llvm. Несколько решений предложили использовать "-enable-shared" при запуске configure, но это не помогло мне. Теперь я хочу перестроить llvm с помощью fPIC, как говорит ошибка. Но как это сделать, используя make файл?

4b9b3361

Ответ 1

Похоже, вы могли бы добавить -fPIC (для независимого от позиции кода, то, что вы хотите для общей библиотеки, которая может быть загружена по любому адресу), установив переменные оболочки:

export CFLAGS="$CFLAGS -fPIC"
export CXXFLAGS="$CXXFLAGS -fPIC"

Глядя на Makefile.rules, они будут подбираться и использоваться. Кажется странным, что его там не было.

EDIT:

Собственно, прочитав больше в make файлах, я нашел эту ссылку в LLVM Makefile Guide. Из Makefile.rules, устанавливая SHARED_LIBRARY = 1 или LOADABLE_MODULE = 1 (что подразумевает SHARED_LIBRARY), в Makefile будет помещать -fPIC в флагов компилятора.

Ответ 2

Если вы умеренно уверены, что вам нужно использовать "-fPIC" везде (или "-m32" или "-m64", что мне нужно чаще), вы можете использовать "трюк":

CC="gcc -fPIC" ./configure ...

Это предполагает оболочку Bourne/Korn/POSIX/ Bash и устанавливает переменную окружения CC в 'gcc -fPIC' перед запуском configure script. Это (обычно) гарантирует, что все компиляции выполняются с указанными флагами. Для установки правильной "биты" компиляции это иногда работает лучше, чем различные другие механизмы, которые вы находите - сложно компиляции извиваться вокруг него, кроме как полностью игнорируя тот факт, что вы указали компилятор C для использования.

Ответ 3

Другой вариант - передать -fPIC непосредственно, чтобы сделать следующим образом:

make CFLAGS='-fPIC' CXXFLAGS='-fPIC'