Me enseñas a compilar?

Post Reply
Message
Author
User avatar
nilsonmorales
Posts: 972
Joined: Fri 15 Apr 2011, 14:39
Location: El Salvador

Me enseñas a compilar?

#1 Post by nilsonmorales »

Los que quieran documentar sus experiencias de como compilar aplicaciones, librerias o lo que venga derivado del código fuente, empezare este hilo con mis experiencias y enfados :D compilando en Puppy.

Codigo fuentes VS .debs u otra forma de paquetería
Cualquiera es libre de opinar sobre si es mejor crear un .pet apartir de un .deb o cualquier otro paquete o hacerlo desde código fuente

Usuarios nuevos:
A los usuarios nuevos les recomiendo antes de empezar a tratar de compilar, familiarizarse con la terminologia acerca de este tema como:
Codigo fuente
Devx
Dependencias
Git
Svn

Usuarios con conocimientos medios/avanzados
Cada uno tiene su sistema algunos mas practicos, limpios, efectivos de como compilar, si lo considera este un buen lugar para aportar, desde ya quedo muy agradecido con ud.

Guia Basica
Descargar el codigo fuente
Sitios como SourceForge, Github, son repositorios de códigos fuentes. se pueden descargar desde el navegador tanto como la terminal si así se desea.

Descomprimir
La mayoria de codigo viene comprimido en tar, tar.gz, zip, no veo dificultad explicando esto.

Archivos README e INSTALL
Casi todo el código fuente trae un archivo readme o install que detalla muy bien la forma de compilar x aplicación, listado de dependencias y pormenores, es bueno leer antes, un poco de ingles básico o cualquier traductor online sirven.

Cargar librerias de compilación
Conocidas como Devx para los usuarios PuppyLinux, Headers en otras distribuciones son librerias usadas para compilar aplicaciones.

Compilación básica

Code: Select all

./configure
make 
make install

Code: Select all

./configure --help
Muestra una ayuda en detalle para compilar
Mantenedores de paquetes

Code: Select all

make DESTDIR=/ruta/directorio install 
o

Code: Select all

make install DESTDIR=/ruta/dirctorio
instala en un directorio externo para facilitar la creación de un paquete .pet
Algunas veces el script configure lo genera autogen.sh entonces.

Code: Select all

./autogen.sh
./configure 
make 
install
Compilando en Python

Code: Select all

python setup.py install 

Code: Select all

python setup.py install --root=/rurta/directorio
Es como DESTDIR del ejemplo anterior.
algunos codigos fuente escritos en python utilizan
autoncofigure.py
y
pip
para hacer lo mismo, es bueno leer la documentación antes.

Compilando en Qt

Code: Select all

mkdir build
cd build
qmake
make install
Compilando en C++

Code: Select all

cmake 
make install
Esto apenas es un indicío de lo que es compilar, seguire editando este hilo en la medida que vaya leyendo y aprendiendo.
Saludos.
[b][url=http://nilsonmorales.blogspot.com/]My blog |[/url][/b][b][url=https://github.com/woofshahenzup]| Github[/url][/b]
[img]https://i.postimg.cc/5tz5vrrX/imag018la6.gif[/img]
[img]http://s5.postimg.org/7h2fid8pz/botones_logos3.png[/img]

Proudog
Posts: 164
Joined: Fri 27 Feb 2009, 19:07

#2 Post by Proudog »

Barry Kauler dice cómo compilar la mayoria de los programas base de puppy en sus blogs; para un ejemplo general es como a continuación:

Code: Select all

# ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --build=i486-pc-linux-gnu

# make

# new2dir make install
Pero eso sólo funciona si tiene un buen script configure, para los programas simples como que hacen los estudiantes de lenguaje C por ejemplo: es necesario "linkear" muchas bibliotecas (libraries) y ingresar un buen de parámetros de gcc o g++, qmake, cmake, etc, para obtener un ejecutable que no dé el clásico "segmentation fault".

No lo considero yo una labor para personas que no saben o no desean programar. Puede frustrarte muy rápido.

User avatar
walter leonardo
Posts: 234
Joined: Thu 10 Dec 2009, 22:10

#3 Post by walter leonardo »

Me enseñas a trolear? :D

User avatar
nilsonmorales
Posts: 972
Joined: Fri 15 Apr 2011, 14:39
Location: El Salvador

#4 Post by nilsonmorales »

Code: Select all

Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix
Que significa esto?.
leyendo en foros dice que debo ubicar donde está pkg-config, para eso escribimos en terminal.

Code: Select all

$ which pkg-config
/usr/bin/pkg-config
Luego para ajustar dicha variable se debe hacer según las explicaciones que he leido.

Code: Select all

export PKG_CONFIG_PATH=/usr/bin/pkg-config
Alguien me puede explicar si es así por favor?
Proudog escribió
Barry Kauler dice cómo compilar la mayoria de los programas base de puppy en sus blogs; para un ejemplo general es como a continuación:
Gracias por el aporte no sabía eso.
PuppyLeo (Walter Troleonardo) escribió
Me enseñas a trolear?
Ya lo eres trol certificado, no puedo enseñarte nada de eso, no aporta en nada tu comentario, pero gracias de todos modos.
Saludos.
[b][url=http://nilsonmorales.blogspot.com/]My blog |[/url][/b][b][url=https://github.com/woofshahenzup]| Github[/url][/b]
[img]https://i.postimg.cc/5tz5vrrX/imag018la6.gif[/img]
[img]http://s5.postimg.org/7h2fid8pz/botones_logos3.png[/img]

User avatar
GustavoYz
Posts: 883
Joined: Wed 07 Jul 2010, 05:11
Location: .ar

#5 Post by GustavoYz »

Interesante querido Nilson.
Agrego algunas cosas que se me fueron cruzando por la cabeza mientras leía, que quizás resulten de provecho.

- La idea del proceso `configure, make, make install` es el proceso "oficial" de compilación GNU; en la vida real, el proceso varia (y mucho) dependiendo de lo que queremos compilar.
- Es un buen hábito usar `./configure --help` para conocer/configurar a priori las dependencias opcionales/obligatorias y habilitar/deshabilitar desde ahí con los flags correspondientes.
- Es un mejor hábito, especificar los "prefixs", "docdir", "manpath" y todos los directorios en donde las cosas iría a para una vez instalado. Vale la pena invertir tiempo en esto, ya que una vez que está bien hecho, no es necesario hacerlo nunca más (lo mismo se aplica al paso `configure` en general; hay slackbuilds que están cumpliendo 10 años y son mantenidos con algun que otro retoque muy de vez en cuando).
- cmake generalmente no soporta el target `uninstall` y el DESTDIR suele levantarlo desde una variable del sistema.

- Creo que es necesario hacer una diferencia entre compilar software escrito en Python y compilar módulos de/para-usar-en Python. En ambas categorías hay muchos otros lenguajes a considerar (pienso en Perl, Haskell, Ruby, nodejs, PHP...).
- Compilar módulos para diversos lenguajes pudiese ser innecesario, ya que casi todos tiene su propio método/cliente (Python tiene easy_install y pip, Perl tiene cpan y cpanp, Haskell tiene cabal, Ruby tiene a gem, nodejs tiene npm, PHP tiene pear, etc.).

Una última cosa, ya hay una sección "Compiling", pero está completamente en inglés y sería una buena idea usar este hilo con el mismo fin, pero en español.

Saludos!

Post Reply