Как скомпилировать 32-битный двоичный файл на 64-битных машинах с Linux, не затрагивая переменную среды CFLAGS

StackOverflow https://stackoverflow.com/questions/1673389

Вопрос

Решение в

Как скомпилировать 32-битный двоичный файл на 64-битной машине Linux с помощью gcc/cmake

это невозможно, потому что я использую стороннее программное обеспечение и другие программы, которые уже используют переменную CFLAGS.И патчить их make-файлы не разрешается, — говорит мой начальник.

Поэтому мне нужно найти другой способ обеспечить его соблюдение.Возможно, какое-то волшебство с символическими ссылками, перенаправляющими вызов gcc на 32-битную версию компилятора (в надежде, что цель по умолчанию не будет обнаружена динамически).

Это было полезно?

Решение

Вам не разрешено изменять CFLAGS в вашей среде, но есть ли какая-либо причина, по которой вы не можете временно отменить его для сборки?

Для пакета на основе autotool я бы сначала попробовал:

CFLAGS="-m32" ./configure [opts]
make
make install

Хорошо написанный configure.ac файл должен учитывать вашу переменную CFLAGS и добавляться к ней, не требуя изменения исходного кода пакета.

Обновлять

Предполагая, что вы также не можете переопределить свою переменную CC, я бы сыграл несколько трюков с путями.Создайте сценарий оболочки в ${HOME}/gcc32 называется gcc со следующим (непроверенным):

#!/bin/sh
/usr/bin/gcc -m32 "$@"

Затем добавьте это к своему пути, если хотите собрать 32-битную версию:

export PATH=${HOME}/gcc32:${PATH}

Очевидные модификации будут поддерживать g++, icc, или любой другой компилятор.

Другие советы

Предположим, что gcc и его друзья расположены в «/usr/bin».Предположим также, что у вас есть папка «~/.local/bin», которая находится на вашем пути.Вы можете создать скрипт bash с именем «gcc» в «~/.local/bin», например:

#! /bin/bash
/usr/bin/gcc -m32 $@

Аналогичным образом вы можете создать сценарий «g++» со следующим содержимым:

#! /bin/bash
/usr/bin/g++ -m32 $@

По сути, продолжайте делать это для «c++», «cc», «as», «ld» и т. д.по мере необходимости.Сделайте скрипты исполняемыми.Убедитесь, что «~/.local/bin» находится в переменной среды PATH ПЕРЕД «/usr/bin».В этом случае, когда make-файл вызывает компилятор (при условии, что они используют относительные пути), вместо этого будут вызываться ваши сценарии.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top