Archive for the ‘Programación y desarrollo’ Category

h1

C++ y Boost.Filesystem: error «undefined reference to status_api»

11/11/2009

Revisión técnica (octubre de 2026): Una referencia indefinida durante el enlazado suele requerir revisar las bibliotecas enlazadas y su compatibilidad ABI. Comprueba las opciones reales del enlazador, que cabeceras y bibliotecas Boost pertenezcan a versiones compatibles, y el orden de los parámetros. En proyectos antiguos, añadir -lboost_filesystem puede formar parte de la solución, pero no garantiza que baste en todos los casos.

Se conserva debajo el artículo original como referencia histórica.


Si al compilar un proyecto c++ que utilice las librerías Boost en Eclipse se produce el siguiente error:

Type undefined reference to boost::filesystem::detail::status_api

o de forma extendida:
Description Resource Path Location Type
undefined reference to `boost::filesystem::detail::status_api(std::basic_string<char, std::char_traits, std::allocator > const&, int&)' Indect3 line 279, external location: /usr/include/boost/filesystem/operations.hpp C/C++ Problem

Se solucionan incluyendo en el linker la librería “boost_filesystem″. En el caso de Eclipse:

Para solucionarlo es necesario ir al siguiente menú:
Propiedades del proyecto > C/C++ Build > Settings > GCC C++ Linker > Libraries > "Libraries (-l)"
y añadir esta referencia:
boost_filesystem

Fuente: Ferdy Christant

h1

Errores habituales con Lintian y soluciones

27/10/2009

Lintian es una utilidad para buscar errores en paquetes .deb. Algunos de ellos son:

1º) Lintian copyright-file-contains-full-gpl-license
Borrar el fichero de copyright
# echo > debian/copyright

Incluir el siguiente texto:
# nano debian/copyright

GPL 1.0 Licence
For details, read /usr/share/common-licenses/GPL

2º) copyright-without-copyright-notice
Introducir el siguiente texto, modificando los valores correspondientes en debian/copyrigth
| This package was debianized by VICTIMS NAME on
| DATE.
|
| The current Debian maintainer is YOUR NAME
|
| It was downloaded from: http://www.download.address/foo.bar.tgz
|
| Upstream Authors: Homer Simpson, Bart Simpson, Maggie Simpson
|
| Copyright: 1971 - 2001 Homer Simpson
| 2001 - 2006 Bart Simpson
|
| This program is free software; you can redistribute it and/or modify
| it under the terms of the GNU General Public License as published by
| the Free Software Foundation; either version 2 of the License.
|
| This program is distributed in the hope that it will be useful,
| but WITHOUT ANY WARRANTY; without even the implied warranty of
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
| GNU General Public License for more details.
|
| You should have received a copy of the GNU General Public License with
| the Debian GNU/Linux distribution in file /usr/share/common-licenses/GPL;
| if not, write to the Free Software Foundation, Inc., 51 Franklin St,
| Fifth Floor, Boston, MA 02110-1301, USA.
|
| On Debian systems, the complete text of the GNU General Public
| License, version 2, can be found in /usr/share/common-licenses/GPL-2.
|
| The Files in lib/maggie are Copyright 2005, 2006 Maggie Simpson
|
| This library is free software; you can redistribute it and/or
| modify it under the terms of the GNU Lesser General Public
| License as published by the Free Software Foundation; either
| version 2.1 of the License, or (at your option) any later version.
|
| This library is distributed in the hope that it will be useful,
| but WITHOUT ANY WARRANTY; without even the implied warranty of
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
| Lesser General Public License for more details.
|
| You should have received a copy of the GNU Lesser General Public
| License along with this library; if not, write to the Free Software
| Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
| On Debian systems, the complete text of the GNU Lesser General Public
| License, can be found in /usr/share/common-licenses/LGPL.
|
| The Debian packaging is (C) 2006, YOUR NAME and
| is licensed under the GPL, see above.

3º) old-fsf-address-in-copyright-file
cambiar la dirección por:
Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.

4º) depends-on-python-minimal
eliminar del fichero debian/control, línea depends, «python-minimal«, ya que será instalado por otros paquetes especificados en esa misma línea.

Fuentes: http://lists.debian.org/debian-devel-announce/2006/03/msg00023.html

h1

ulimit: 181: Illegal option -u en scripts Linux

21/10/2009

En un script se puede reproducir el siguiente problema con ulimit:

ulimit: 181: Illegal option -u

Esto ocurre cuando se utiliza una shell distinta de bash. Para evitarlo, y si no hay más consecuencias en el script, vale con cambiar de shell:

#!/bin/sh
#!/bin/bash

h1

Compilación: linker no encuentra -lXext al construir GhostPDL

15/10/2009

Revisión técnica (octubre de 2026): El enlazador informa de que no encuentra la biblioteca solicitada con -lXext. Comprueba los paquetes de desarrollo instalados, la arquitectura y las rutas de búsqueda del compilador. En Debian/Ubuntu suele corresponder a la familia de paquetes libxext-dev, pero verifica el nombre para tu versión; GhostPDL 8.70 es histórico.

Se conserva debajo el artículo original como referencia histórica.


El siguiente error compilando «ghostpdl«:

#kubuntu@kubuntu:~/xbuild/ghostpdl-8.70$ make
./obj/echogs -a ./obj/ldall.tr -s - ./obj/gsromfs1.o ./obj/plmain.o ./obj/plimpl.o  -lm -lpthread -ldl
sh <./obj/ldall.tr
/usr/bin/ld: cannot find -lXext
collect2: ld returned 1 exit status
make[2]: *** [obj/pcl6] Error 1
make[2]: Leaving directory `/home/kubuntu/xbuild/ghostpdl-8.70/main'
make[1]: *** [pdl-product] Error 2
make[1]: Leaving directory `/home/kubuntu/xbuild/ghostpdl-8.70/main'
make: *** [pcl] Error 2

se soluciona instalando la siguiente librería.

kubuntu@kubuntu:~$ sudo apt-get install libxext-dev

En algunos entornos también puede ser necesario libx11-dev:

kubuntu@kubuntu:~$ sudo apt-get install libx11-dev

h1

Como medir el tiempo que utiliza un proceso en ejecutarse usando time

07/10/2009

Si se desean realizar por ejemplo comparativas de distintos binarios para comprobar su rendimiento, una de los parámetros a estudiar puede ser el tiempo de ejecución de los mismos sobre la misma máquina.

Para ello, en vez de utilizar un script bash con el comando «date –rfc-3339=ns», se puede utilizar el comando «time» seguido del programa, a modo de cronómetro.

carlos@WhenIGrowUp:~/tmp/capturas.tests$ time cat /etc/debian_version
lenny/sid
real 0m0.003s
user 0m0.004s
sys 0m0.004s

h1

MonoDevelop: error al ejecutar gmcs durante la compilación

09/02/2009

Revisión técnica (octubre de 2026): La excepción mostrada procede de MonoDevelop 1.0 y del antiguo compilador gmcs. No supongas que los paquetes ni ejecutables siguen existiendo en distribuciones actuales. Identifica el runtime, los archivos del proyecto y el compilador requerido antes de intentar compilar; si el proyecto puede migrarse, documenta primero sus dependencias y compatibilidad con herramientas modernas.

Se conserva debajo el artículo original como referencia histórica.


Si compilando con Monodevelop 1.0 ocurre el siguiente error:

ERROR [2009-02-09 21:57:59Z]: System.ComponentModel.Win32Exception: ApplicationName='/usr/bin/gmcs', CommandLine='"@/tmp/tmp1afe7a7c.tmp"', CurrentDirectory='/home/carlos/p3/p3'
at System.Diagnostics.Process.Start_noshell (System.Diagnostics.ProcessStartInfo startInfo, System.Diagnostics.Process process) [0x00000]
at System.Diagnostics.Process.Start_common (System.Diagnostics.ProcessStartInfo startInfo, System.Diagnostics.Process process) [0x00000]
at System.Diagnostics.Process.Start () [0x00000]
at MonoDevelop.Core.Execution.ProcessWrapper.Start () [0x00000]
at (wrapper remoting-invoke-with-check) MonoDevelop.Core.Execution.ProcessWrapper:Start ()
at MonoDevelop.Core.Execution.ProcessService.StartProcess (System.Diagnostics.ProcessStartInfo startInfo, MonoDevelop.Core.Execution.ProcessEventHandler outputStreamChanged, MonoDevelop.Core.Execution.ProcessEventHandler errorStreamChanged, System.EventHandler exited) [0x00000]

Se soluciona en dos pasos:

1º) Instalar gmcs

# sudo apt-get install mono-gmcs

2º) Al disponer de gmcs2 y no de gmcs, crear un enlace para cubrir las llamadas a gmcs

# cd /usr/bin
# sudo ln gmcs2 gmcs

h1

Compilar en Linux: error «GL/gl.h: No such file or directory»

28/12/2006

Revisión técnica (octubre de 2026): El error suele indicar que falta una cabecera de desarrollo de OpenGL en las rutas de compilación. En Debian y Ubuntu, revisa qué paquete proporciona GL/gl.h en tu versión; la familia de paquetes Mesa ha cambiado con los años. El driver Unichrome y los paquetes mencionados en 2006 pertenecen a un entorno histórico.

Se conserva debajo el artículo original como referencia histórica.


Al compilar el driver Unichrome puede producirse este error:

/usr/include/GL/glxint.h:28:19: error: GL/gl.h: No such file or directory

Se soluciona instalando el paquete libgl1-mesa-dev y su/s dependencias, como por ejemplo x11proto-gl-dev.

h1

Autotools: error aclocal «macro AM_CFLAGS not found»

28/12/2006

Revisión técnica (octubre de 2026): El ejemplo de 2006 corresponde a un sistema con Automake 1.9. Comprueba versiones de automake, aclocal, autoconf y las macros del proyecto antes de regenerar los archivos de construcción. Instalar Automake 1.9 no es una solución general para entornos actuales; revisa el fichero configure.ac y las dependencias concretas.

Se conserva debajo el artículo original como referencia histórica.


Si sucede el siguiente error en alguna compilación:

aclocal configure.ac 136 macro AM_CFLAGS not found in library

es suficiente con actualizar a automake1.9

#sudo apt-get install automake1.9

h1

Linux: man no encuentra strrchr u otra función de C

28/11/2006

Revisión técnica (octubre de 2026): El manual de una función de biblioteca C suele consultarse en la sección 3, por ejemplo man 3 strrchr. Si no aparece, comprueba que tienes instaladas las páginas del manual de desarrollo en tu distribución; las denominaciones de paquetes de 2006 pueden haber cambiado. El error no implica que falte la función en el compilador.

Se conserva debajo el artículo original como referencia histórica.


Programando C desde Linux es frecuente hacer en la consola un «man nombre_de_la_función». Si tienes su sistema recién instalado y te ocurre esto:

carlos@pushit:~/software$ man strrchr
No existe entrada de manual para strrchr

no tienes nada más que instalar los paquetes correspondientes:

sudo apt-get install manpages-es manpages-es-extra