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

//Java version, fully tested

public class Rotate90degree {


        public static void reverseElementsRowWise(int[][] matrix) {
            int n = matrix.length;
            for(int i = 0; i < n; ++i) {
                for(int j = 0; j < n / 2; ++j) {
                    int temp = matrix[i][n - j - 1];
                    matrix[i][n - j - 1] = matrix[i][j];
                    matrix[i][j] = temp;
                }
            }
        }

        public static void transpose(int[][] matrix) {
            int n = matrix.length;
            for(int i = 0; i < n; ++i) {
                for(int j = i + 1; j < n; ++j) {
                    int temp = matrix[i][j];
                    matrix[i][j] = matrix[j][i];
                    matrix[j][i] = temp;
                }
            }
        }

        public static void rotate90(int[][] matrix) {
            transpose(matrix);
            reverseElementsRowWise(matrix);
        }

        public static void print(int[][] matrix) {
            int n = matrix.length;
            for(int i = 0; i < n; ++i) {
                for(int j = 0; j < n; ++j) {
                    System.out.print(matrix[i][j]);
                    System.out.print(' ');
                }
                System.out.println();
            }
        }

        public static void main(String[] args) {
            int[][] matrix = {
                    {1, 2, 3, 4},
                    {5, 6, 7, 8},
                    {9, 10, 11, 12},
                    {13, 14, 15, 16}};
            System.out.println("before");
            print(matrix);
            rotate90(matrix);
            System.out.println("after");
            print(matrix);
        }
}
11
задан Community 23 May 2017 в 11:53
поделиться

2 ответа

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

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

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

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

Обновление

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

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

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

15
ответ дан 3 December 2019 в 07:13
поделиться

Предположим, что 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-файл вызывает компилятор (при условии, что они используют относительные пути), вместо этого будут вызваны ваши сценарии.

2
ответ дан 3 December 2019 в 07:13
поделиться