Tag Archive for 'programacion'Page 2 of 4

Howto: Compilar Mimas 2.1 y su libmimas.so en GCC 4.2.x

Mimas es un toolkit muy completo, incluso mas completo que OpenCV. Pero compilarlo es una pesadilla, el procedimiento al que llegúe es el siguiente:

  1. Descarga Mimas-2.1 (30 Oct 2006)
  2. Entra al directorio y: make -f Makefile.dist
  3. Aplica el ./configure y asegúrate de no tener errores, si tiene errores es por culpa de librerías que te faltan, instálalas. El configure es muy explícito y te dice qué salió mal.
  4. Lo que realmente es útil es la librería, asi que entra al directorio lib y: make
  5. Si tienes un GCC reciente(>4.2.2) lo más seguro es que no funcione, así que elimina todas las referencias a lo siguiente:
  • findpipette
  • pgh_2dobject
  • pgh
  • pgh_scene
  • pol
  • pol_locator_hough
  • pol_locator_scale
  • pol_model
  • pol_scene

Y me refiero a TODO, incluyendo los *.lo, *.cc y *.Plo. Si lo hiciste bien, y tienes las librerías completas, entonces podrás compilar con make.

Ahí mismo donde tienes el Makefile podrás ver el resultado de la compilación si entras al directorio .libs (comienza con un punto por lo que no aparece en el ls, pero aparece en el ls -la). Por cierto, si te sirven, todos los *.o son objetos que puedes enlazar individualmente de manera estática.

$ cd .libs
$ ls  *.o         (objectos compilados)
$ ls libmimas*    (static & shared objects)

El archivo .libs/libmimas.so.2.0.1 y sus links simbólicos son el shared object y junto con el directorio mimas-2.1/include (el cual contiene los headers) sirven para desarrollar usando mimas. Todo lo de la carpeta lib se compiló exceptuando los que eliminaste del makefile.

Y como siempre hay gente muy floja.

¿Por qué hacer todo esto?

Porque salen errores de este tipo

../include/image_op.h:100:   instantiated from ‘mimas::image<T> mimas::image_func(const mimas::const_image_ref<T2, T2Ptr>&, const mimas::const_image_ref<T3, T3Ptr>&, F) [with T1 = int, T2 = int, T3 = int, F = std::multiplies<int>, T2Ptr = int*, T3Ptr = int*]’
../include/image_op_help.h:22:   instantiated from ‘mimas::image<T> mimas::operator*(const mimas::const_image_ref<T, TPtr>&, const mimas::const_image_ref<T, UPtr>&) [with T = int, T1Ptr = int*, T2Ptr = int*]’
../include/image_funcs.h:390:   instantiated from ‘mimas::image<T> mimas::edgeHaynesJain(const mimas::const_image_ref<T, TPtr>&, const mimas::const_image_ref<T, UPtr>&) [with T = int, T1Ptr = int*, T2Ptr = int*]’
findpipette.cc:92:   instantiated from here

../include/image_op.h:75: error: no matching function for call to ‘multi_apply(boost::multi_array_ref<int, 2u>&, boost::const_multi_array_ref<int, 2u, const int*>&, boost::const_multi_array_ref<int, 2u, const int*>&, mimas::_multi_help2<int, int, int, std::multiplies<int> >&)’

[...]

make: *** [findpipette.lo] Error 1

WTF???????????

Que en español es

../include/image_op.h:75: error: no hay una función coincidente para la llamada a ‘multi_apply(boost::multi_array_ref<int, 2u>&, boost::const_multi_array_ref<int, 2u, const int*>&, boost::const_multi_array_ref<int, 2u, const int*>&, mimas::_multi_help2<int, int, int, std::plus<int> >&)’

Kickstart a Gstreamer, un simple programita

#include <gst/gst.h>
int main (int   argc, char *argv[]){
  const gchar *nano_str;
  guint major, minor, micro, nano;
  gst_init (&argc, &argv);
  gst_version (&major, &minor, &micro, &nano);

  if (nano == 1)
    nano_str = "(CVS)";
  else if (nano == 2)
    nano_str = "(Prerelease)";
  else
    nano_str = "";
  printf ("Hola, yo se usar: GStreamer %d.%d.%d %s\n",
          major, minor, micro, nano_str);
  return 0;
}

Y compilas con

g++ `pkg-config --cflags --libs gstreamer-0.10` -o Hola Hola.cpp

Eso te dará como resultado un programa que dice

Hola, yo se usar: GStreamer 0.10.18

O la versión que uses. Luego de eso te das una vuelta y maldices a la gente de Phonon, porque teniendo algo tan completo y organizado como Gstreamer han decidido rehacer la rueda. El OSS en el pecado lleva la penitencia.

Im too sexy

Im too sexy for my... (nvidia 280 GTX)

Nvidia 7300 gs vs 280 GTX

C++: ¿CodeBlocks o Netbeans o Anjuta o Eclipse?

Esa es la tarea de estos dias. Programar en Linux y encontrar una IDE decente, pero de verdad decente. Ya le di una oportunidad a Code::Blocks y lo veo muy inmaduro aun, al probar Anjuta de plano solo aguante unos pocos minutos y lo deseché. Estoy con Netbeans y aunque se hizo para Java, es trivial (estilo addon de Firefox 3) instalar el pluging de C++. Hasta ahora Netbeans me ha gustado mas que CodeBlocks.

¿Que busco?

  • Resalte de sintaxis C++ (incluyendo todo el arbol de includes)
  • Debug & Release profiles
  • Comodo de usar
  • Estable
  • Facilmente configurable y flexible
  • …y si se puede, que sea bonito

Creo que mi top 3 quedará asi:

  1. Netbeans
  2. Code::Blocks
  3. Eclipse (aun por definir)

Subversion y Visual Studio con Tortoise

Cada vez mis proyectos (o Solutions) de Visual C++ además de ser ya varios, son cada vez más y más grandes, el mas grande ya va en mas de 15megas y el segundo ya casi está en 10. Tengo un server SVN que instalé en un linux remoto y muy muy seguro (no pregunten donde).  El respaldo no está de más, ademas que el control de versiones ha probado ser un verdadero salvavidas.

Sin embargo no podía usar SVN integrado dentro del Visual Studio, tenía que usarlo fuera y siendo yo tan flojo… uhmmm, es mejor integrar SVN dentro de Visual Studio 2005. Sigue leyendo para tener las instrucciones completas.

  1. Instalar o conseguir algun server SVN.
  2. Instalar Tortoise SVN
  3. Abrir el Visual Studio en “Tools ->External Tools“. Agregar los 5 siguientes:

Title:     Tortoise &Update
Command:     C:\Program Files\TortoiseSVN\bin\TortoiseProc.exe
Arguments:     /command:update /path:”$(SolutionDir)” /notempfile

Title:     Tortoise &Log
Command:     C:\Program Files\TortoiseSVN\bin\TortoiseProc.exe
Arguments:     /command:log /path:”$(SolutionDir)” /notempfile

Title:     Tortoise Check for &Modifications
Command:     C:\Program Files\TortoiseSVN\bin\TortoiseProc.exe
Arguments:     /command:repostatus /path:”$(SolutionDir)” /notempfile

Title     Tortoise Re&vert
Command     C:\Program Files\TortoiseSVN\bin\TortoiseProc.exe
Arguments     /command:revert /path:”$(SolutionDir)” /notempfile

Title     Tortoise &Commit
Command     C:\Program Files\TortoiseSVN\bin\TortoiseProc.exe
Arguments     /command:commit /path:”$(SolutionDir)” /notempfile

Y van a aparecer en tu menú de Tools (o Herramientas si lo tienes en español). Listo, ya si quieres puedes ponerlo en íconos de barra de herramientas o lo que sea.

(Sí, búrlate, el mío esta en español, y sí, es una pesadilla)

Obviamente debes tener todo en orden, y me refiero a que ésto solo funciona cuando ya tienes una copia de trabajo hecha usando Tortoise a mano. Si no sabes que cosa es SVN ni como poner las cosas en orden la primera vez, entonces ¡¡¡¿ para que demonios leiste esta guia ?!!!

Hay más información en este sitio sobre cómo poner el SVN en la barra de herramientas. O en este otro para los seres que instalan un server SVN sobre windows (creyendo que estarán seguros).

Solución para: “Debugger detected! Please close it down and restart!”

Hoy parece un día malo, primero el Visual Studio y ahora esto:

Debugger detected! Please close it down and restart!
Windows NT user: Please note that having the WinICE/SoftICE services installed means that you are running a debugger!

Debugger detected! Please close it down and restart! Windows NT user: Please note that having the WinICE/SoftICE services installed means that you are running a debugger!

Algunos dicen que hay que eliminar el Nero, pero yo no tengo Nero. El responsable sin embargo parece ser la compañia detrás de Nero. Este diálogo proviene de NeVideo.ax. Es un filtro de DirectShow. Te toparás con este error si estas haciendo procesamiento de video, usando librerias de DirectShow, OpenCV o algo similar.

Solución

Elimina ese archivo NeVideo.ax. En mi caso lo encontré en
C:\Archivos de programa\Archivos comunes\Ahead\DSFilter\NeVideo.ax

Si no tienes ese archivo tal vez sea uno nuevo de Nero o de alguna otra inteligente compañia que le gusta atormentar a los desarrolladores. La solucion en ese caso es darle “Aceptar” al diálogo y buscar entre los Resultados (Output) de Visual Studio algun mensaje que tenga que ver con archivos .ax raros.

Solución para la “System.DllNotFoundException”

Ok, estabas trabajando felizmente en tu nueva aplicación, que por cierto usa Visual Basic 2005 (VB.NET) para cargar una DLL de C++. Entonces decides formatear tu PC, o bien cambiarte a trabajar a otra PC. Y resulta que tu programa se la pasa maldiciéndote con:

ERROR:System.DllNotFoundException: Unable to load DLL ‘cualquier.dll’:
No se pudo iniciar la aplicación porque su configuración es incorrecta.
Reinstalar la aplicación puede solucionar el problema.

¿Que hiciste?
Te aseguraste de que los PATH esten correctos, de que las DLL fueran encontradas, incluso le pediste ayuda a Filemon y te dice que no puede encontrar algo relacionado a MSVCRT80.DLL y otras bazofias.

Fuiste un desesperado y hasta llegaste a ser capaz incluso de arrojar todas las DLL’s en el mismo directorio de la aplicación pero a pesar que eso soluciona este problema la mayoria de la veces, esta vez nada parece funcionar.

La solución

Instala el “Microsoft Visual C++ 2005 Redistributable Package“, tal vez necesites la version SP1 o la version anterior.

Se supone que Visual Studio debió haberlo instalado, pero si eres de los trompetes que les gusta usarlo en español a esto es a lo que te expones. Ya ves aprende inglés.

Ahh y mas te vale que lo metas junto con tu aplicación o los dolores de cabeza los vas a trasladar a los usuarios.