El problema: Tienes librerias personales que tú mismo creaste, o bien librerías sin instalar que no estan en /usr/lib sino en otros directorios raros y quieres enlazar con gcc.
La solución: Se debe indicar a gcc en donde estan las librerias usando -L<dir>, luego enlazarlas como librerías normales usando -l<name>. Por ejemplo para enlazar la librería /home/user/tmp/libtrompete.a:
gcc -L/home/user/tmp/ -ltrompete main.cpp
Nota que solo se le indica el nombre trompete, porque gcc le agrega lib+trompete = libtrompete. GCC también busca automáticamente si es .o, .so o si es una AR .a.

Es muy útil hacer debugging con std::cerr, y si usas:
#include <iostream>
using namespace std;
main(blabla...){
cerr << "This is a debug message" << endl;
}
Todo funciona maravillosamente, hasta que tus 20 threads comienzan a vomitar cientos y cientos de mensajes que hacen imposible leer el debug. Para ello lo ideal sería definir “debug levels”. Hay dos formas la forma simple y tonta:
#ifdef DEBUG_N
cerr << "This is a debug message" << endl;
#endif
Pero esa forma es muy fastidiosa, así que mejor definimos un ‘cerdo‘ (cerdo = cerr debug output). O incluso mejor un cerdo con niveles: cerdo, cerdo2, cerdo3,… , cerdoN. He aqui uno para 3 niveles (donde hacemos que cerdo=cerdo1):
// ----- cerdo.h -----
#ifndef DEBUG
#define cerdo if(0) cerr
#define cerdo1 if(0) cerr
#define cerdo2 if(0) cerr
#define cerdo3 if(0) cerr
endif
#if (DEBUG==1)
#define cerdo cerr
#define cerdo1 cerr
#define cerdo2 if(0) cerr
#define cerdo3 if(0) cerr
#endif
#if (DEBUG==2)
#define cerdo cerr
#define cerdo1 cerr
#define cerdo2 cerr
#define cerdo3 if(0) cerr
#endif
#if (DEBUG==3)
#define cerdo cerr
#define cerdo1 cerr
#define cerdo2 cerr
#define cerdo3 cerr
#endif
// ---- end cerdo.h ----
Ahora solo queda usar los cerdos.
#define DEBUG 2
#include "cerdo.h"
using namespace std;
main(blabla...){
cerdo << "This is a debuglevel 1 message" << endl;
cerdo1 << "This is a debuglevel 1 message" << endl;
cerdo2 << "This is a debuglevel 2 message" << endl;
cerdo3 << "This is a debuglevel 3 message" << endl;
}
Bye. Continue reading ‘Debugging con el ‘cerdo’ y con std::cerr’
Hay dos formas, directo del repositorio y usando una copia local del trunk.
Directo del repositorio
$ svn merge -r START:END http://repo/svn/trunk /directorio/branch
De una copia local:
$ svn up /directorio/trunk
$ svn merge -r START:END /directorio/trunk /directorio/branch
Cualquiera de las dos anteriores te hace un merge a la copia local que está en /directorio/branch.
Para finalmente subir (a la branch) los cambios obtenidos
$ svn ci -m "Merge del trunk a mi branch START:END" /directorio/branch
Si no se pusieron de acuerdo tus programadores, probablemente salgan conflictos, arreglalos.
Cómo convertir un AR archive (.a) lleno de static objects (.o) a un Shared Object (.so)
a files are just (ar) archives of .o object files, so all you need to do is unpack the archive and repackage them as a shared object (.so).
ar -x mylib.a
gcc -shared *.o -o mylib.so
Suele pasar en Gnome abriendo cosas de KDE de vez en cuando.
- :~$ dcopserver_shutdown
- :~$ kdeinit
- Listo
Pasa cuando sales de Gnome con CTRL-ALT-BACKSPACE, lo mejor seria meterlo en el inicio de sesion de Gnome.
No le creas a las malas lenguas que dicen que la cámara Microsoft Lifecam VX-6000 (045e:00f4) no funciona en linux. La verdad es que sí funciona. Dale lsusb, y si te sale 045e:00f4 simplemente instala el driver de Microdia pero asegurate de aplicarle el parche. Aunque, ten cuidado, tal vez para el momento que leas esto el parche ya estará en el GIT y no haga falta, chécalo antes.

Si compilas el parche y si no quiere insertarlo, tal vez te haga falta insertar primero los módulos
# modprobe videodev
# modprobe compat-ioctl32
Y luego meter el driver de microdia recien compilado.
# insmod ./microdia.ko
Sí funciona, me consta porque yo tengo varias funcionando y funcionando bien. Así que si no puedes el error esta entre la silla y el teclado. Y si nada funciona, tal vez Continue reading ‘Microsoft Lifecam VX-6000 = Microdia’