//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);
}
}
Вам не разрешено изменять CFLAGS в вашей среде, но есть ли причина, по которой вы не можете временно отменить его для сборки?
Для пакета на основе autotool я сначала попробую:
CFLAGS="-m32" ./configure [opts]
make
make install
Хорошо написанный файл configure.ac
должен учитывать вашу переменную CFLAGS и присоединяться к ней, не требуя от вас изменения источника пакета.
Обновление
Если предположить, что вы также не можете переопределить свою переменную CC, я бы поигрался с некоторыми трюками с путями. Создайте сценарий оболочки в $ {HOME} / gcc32
с именем gcc
со следующим (непроверенным):
#!/bin/sh
/usr/bin/gcc -m32 "$@"
Затем добавьте его к своему пути, если вы хотите построить 32-разрядную версию:
Предположим, что 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-файл вызывает компилятор (при условии, что они используют относительные пути), вместо этого будут вызваны ваши сценарии.