Cómo compilar un binario de 32 bits en la maquina Linux de 64 bits sin tocar la variable de entorno CFLAGS

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

Pregunta

La solución en

Cómo compilar un binario de 32 bits en una máquina Linux de 64 bits con gcc / cmake

No es posible porque el uso de software de terceros tercero y otras cosas que está utilizando la variable CFLAGS ya. Y parchear sus archivos make no se permite -. Dice mi jefe

Así que tengo que encontrar otra manera de hacerla cumplir. Tal vez un poco de magia con enlaces simbólicos redirigir una llamada a GCC para una versión de 32 bits del compilador (con la esperanza de que el destino predeterminado no se detecta de forma dinámica).

¿Fue útil?

Solución

No se le permite cambiar CFLAGS en su entorno, pero ¿hay alguna razón usted no puede anular temporalmente para la construcción?

Para un paquete basado en AutoTool, me gustaría probar primero:

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

Un archivo configure.ac bien escrito debe respetar la variable CFLAGS y anexar a la misma, sin necesidad de modificar el origen del paquete.

Actualizar

Suponiendo, entonces, que no se puede volver a definir la variable de CC, ya sea, me gustaría jugar algunos trucos de ruta. Hacer un script de shell en ${HOME}/gcc32 llamada gcc con la siguiente (no probado):

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

A continuación, anteponer esto a su trayectoria cuando se quiere construir 32 bits:

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

modificaciones obvias apoyarán g++, icc, o cualquier otra compilador.

Otros consejos

Vamos a suponer que gcc y amigos se encuentran en "/ usr / bin". Supongamos también que usted tiene una carpeta llamada "~ / .local / bin" que se encuentra en su camino. Puede crear un script bash llamado "gcc" en "~ / .local / bin" como:

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

Se pueden crear de manera similar un "g ++" guión con el contenido de la siguiente manera:

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

Básicamente, seguir haciendo esto para "C ++", "cc", "como", "LD", etc., según sea necesario. Hacer los guiones ejecutable. Asegúrese de que "~ / .local / bin" está en su variable de entorno PATH antes de "/ usr / bin". Si ese es el caso, entonces cuando el makefile invoca el compilador (suponiendo que utilizan rutas relativas), las secuencias de comandos se pueden invocar, en su lugar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top