Archive for the ‘Programación y desarrollo’ Category

h1

Errores portando aplicaciones C++ Windows a Solaris (II)

28/12/2012

Al portar una aplicación C++ para Windows desarrollada enVisual Studio hacia Solaris o entornos Unix, se recomienda utilizar las siguientes conversiones y consejos.

CONVERSIÓN VISUAL STUDIO A C++

Tipos equivalentes en Visual Studio y Solaris:

_isnan → isnan
__Int64 →  long long
PVOID pvData; → typedef void *PVOID;
__forceinline double CALERF(double ARG, int JINT) → inline
const BSTR ToBSTR() const throw (Exceptions::cException); → typedef char* BSTR;

"src/Utils/strings/cAnsiString.cpp", line 707: Error: The function "_snprintf" must have a prototype.
Sustituir por «snprintf»

"headers/Utils/cVariant.h", line 12: Error: Could not open include file<oaidl.h>
Prescindir de él (comentarlo), definiendo las variables como LPVARIANT en cVariant.h (e incluir esta cabecera en su lugar).

m_variant.bstrVal = ::SysAllocString(str);, SysAllocString is not a member of file level
sustituir por algo equivalente a:
m_variant.bstrVal = _bstr_t bstrt(str);

struct cTypeFunction {
enum Type
{
MIN,
MAX,
MULT,
SUM,
};
};

sustituir por algo equivalente a:

struct cTypeFunction
{
typedef enum
{
MIN,
MAX,
MULT,
SUM
} Type;
};

Conversiones habituales de tipos:
typedef unsigned short WORD;
typedef short BOOL;
typedef void *LPVOID;
typedef const void *LPCVOID;
typedef unsigned char UCHAR;
typedef unsigned char *PUCHAR;
typedef unsigned short USHORT;
typedef int32_t LONG;
typedef uint32_t ULONG;
typedef ULONG *PULONG;
typedef ULONG DWORD;
typedef DWORD *PDWORD;
typedef LONG RESPONSECODE;
typedef char *LPSTR;
typedef const char *LPCSTR;
typedef const BYTE *LPCBYTE;
typedef BYTE *LPBYTE;
typedef DWORD *LPDWORD;
typedef void *PVOID;

h1

Errores portando aplicaciones C++ Windows a Solaris (I)

28/12/2012

Al portar una aplicación C++ para Windows desarrollada enVisual Studio hacia Solaris o entornos Unix, se recomienda utilizar las siguientes conversiones y consejos:

PROGRAMACIÓN

"src/ImpliedVolsCalculation/cHestonPricerUtils.cpp", line 362: Error: Overloading ambiguity between "DateTime::operator+(const DateTime::cDate&, const DateTime::cPeriod&)" and "built-in operator+(long, const wchar_t*)"
Separar la suma en dos líneas.

Error: Could not find a match for Utils::Strings::CaseInsensitiveCompare(char*const, const wchar_t[4]) needed in static ContractPricing::MarketData::cXLCapletBlackVolatilityMatrixBuilder::ReadCapletStrikes(void**const).:if (Utils::Strings::CaseInsensitiveCompare(var[0][k].ToBSTR(), L"ATM"))
Cambiar L”ATM” (formatoUnicode) por ”ATM”

c++ is multiply defined
Probablemente una variable está duplicada en dos ficheros, empezar buscando que el mismo fichero al que referencia el compilador no esté duplicado…

namespaces cannot be declared in a class scope
Mover los inlines que haya declarados fuera de la clase a dentro de la clase, eliminando los namespaces de esos métodos. Y comprobar que la llave que cierra el namespace NO lleve un “;”

cannot have a using directive in a class
Comentar el using.

String is not defined
Añadir “using namespace std;”

c++ +"is not a static data member"
Comprobar los parámetros (los tipos concretamente, que existan) del constructor.

"src/cHestonAnalyticalSolver.cpp", line 86: Error: Too many arguments in call to "std::complex<double>::real() const".
El método .real() no admite parámetros en Solaris, es necesario salvar los resultados de los cálculos en una nueva variable de nombre distinto y devolver esa.

cannot create a variable for abstract class cAutocallSwapEngine
Ver la clase de la que hereda, pues hay algún parámetro que probablemente falte en sus constructores y virtuales.

"../../Include/Heston/HestonPricingInputData.h", line 269: Error: ")" expected instead of "<".
Añadir el espacio de nombres “using namespace std;”

"template vector is not defined"
añadir “using namespace std”;

h1

Error Visual Studio Spawning ‘mt.exe’ importando proyectos C++

03/08/2012

Si en Visual Studio 2008 ocurre el siguiente error:

Error PRJ0003: Spawning 'mt.exe' (Visual Studio 2008)

Se debe a que no encuentra ese aplicación para generar el manifest incluido en el binario objetivo. Para evitar este error hay varias opciones:

  1. Generar el binario:

    1.1) Incluir el binario en el path que utiliza Visual Studio para buscar sus aplicaciones:
    [[http://peramides.wordpress.com/2010/06/25/error-spawning-mt-exe/]]

    1.2) Si no está, instalarlo:
    [[http://connect.microsoft.com/VisualStudio/feedback/details/451889/error-prj0003-spawning-mt-exe]]

  2. Prescindir del manifest:

Seleccionar el proyecto (no la solución) > Project > Properties > Configuration properties > Linker > Manifest File > Generate Manfiest = NO

h1

Precisión en C++

24/07/2012

Si se desarrollan aplicaciones en C++ que deben imprimir por consola valores «double» con alta precisión, como ocurre frecuentemente en banca, es necesario utilizar el siguiente método:

int main () {
double f = 3.14159;
cout.precision(5); //cantidad de decimales
cout << f << endl;
return 0;
}

Fuente: http://www.cplusplus.com/reference/iostream/ios_base/precision/

h1

PHP: solucionar «Call to undefined function curl_init()»

21/02/2012

Actualización de octubre de 2026: la solución original menciona php5-curl, un nombre de paquete de versiones antiguas. En Debian/Ubuntu actuales, la extensión suele distribuirse como php-curl o un paquete específico de la versión instalada. Comprueba primero qué PHP ejecuta la aplicación y si la extensión está cargada, ya que el PHP de la línea de comandos puede diferir del utilizado por el servidor web.

Tras instalar la extensión adecuada, reinicia o recarga el servicio PHP que corresponda; no copies literalmente instrucciones dirigidas a PHP 5.

Relacionado: opciones de PHP en Joomla.


Si se produce el siguiente error en PHP:

Notice: Use of undefined constant add_css - assumed 'add_css' in /var/www/joomlatest/plugins/content/sexybookmarks.php on line 49 Fatal error: Call to undefined function curl_init() in /var/www/joomlatest/plugins/content/sexybookmarks.php on line 400

Es necesario instalar el soporte de «curl» en PHP:
$ sudo apt-get install php5-curl

h1

Error *** buffer overflow detected ***: kissdx terminated

14/01/2012

Si se produce el siguiente error al arrancar Kissdx:

carlos@shirley:~/kissdx/trunk.r191$ kissdx -v
[ 1723] 2012-01-14 18:44:44 Using config file /etc/kissdx.conf
[ 1723] 2012-01-14 18:44:44 kissdx v0.13-10a, 2007-01-30 is now using the following configuration:
[ 1723] 2012-01-14 18:44:44 audiopath = /media/audio
[ 1723] 2012-01-14 18:44:44 videopath = /media/video
[ 1723] 2012-01-14 18:44:44 picturepath = /media/picture
[ 1723] 2012-01-14 18:44:44 persistentstoragepath =
[ 1723] 2012-01-14 18:44:44 kmlurl = http://tinystocks.com/k/kiss.php
[ 1723] 2012-01-14 18:44:44 pretrigger =
[ 1723] 2012-01-14 18:44:44 posttrigger =
[ 1723] 2012-01-14 18:44:44 audiofileextensions = mp3,ogg,wma,wav
[ 1723] 2012-01-14 18:44:44 videofileextensions = mpg,mpeg,vob,avi,wmv,ts,mp4
[ 1723] 2012-01-14 18:44:44 picturefileextensions = jpg,jpeg,png,bmp
[ 1723] 2012-01-14 18:44:44 isofileextensions = iso,img
[ 1723] 2012-01-14 18:44:44 max_recent_files = 30
[ 1723] 2012-01-14 18:44:44 server_character_set =
[ 1723] 2012-01-14 18:44:44 client_character_set =
[ 1723] 2012-01-14 18:44:44 subtitle_catchall_pattern = {name}*.*
[ 1723] 2012-01-14 18:44:44 picturetargetwidth = 1280
[ 1723] 2012-01-14 18:44:44 picturetargetheight = 720
[ 1723] 2012-01-14 18:44:44 picturemaxzoompercent = 20
[ 1723] 2012-01-14 18:44:44 picturecachesize = -1
[ 1723] 2012-01-14 18:44:44 picturecachetrimminginterval = 5
[ 1723] 2012-01-14 18:44:44 networktimeoutinterval = 0
[ 1723] 2012-01-14 18:44:44 enablehiddenfilestext = Toggle all files status
[ 1723] 2012-01-14 18:44:44 enablehiddenfilesminutes = 1
[ 1723] 2012-01-14 18:44:44 starting kissdx...
*** buffer overflow detected ***: kissdx terminated
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(__fortify_fail+0x37)[0x7f4c82e797f7]
/lib/x86_64-linux-gnu/libc.so.6(+0xf7710)[0x7f4c82e78710]
/lib/x86_64-linux-gnu/libc.so.6(+0xf65e3)[0x7f4c82e775e3]
kissdx[0x403ee6]
kissdx[0x4042e2]
kissdx[0x40303e]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xed)[0x7f4c82da230d]
kissdx[0x4030bd]
======= Memory map: ========
00400000-00423000 r-xp 00000000 08:71 2759001 /usr/sbin/kissdx
00622000-00623000 r-xp 00022000 08:71 2759001 /usr/sbin/kissdx
00623000-0062c000 rwxp 00023000 08:71 2759001 /usr/sbin/kissdx
0062c000-00700000 rwxp 00000000 00:00 0
023db000-023fc000 rwxp 00000000 00:00 0 [heap]
7f4c8242b000-7f4c82440000 r-xp 00000000 08:71 1179692 /lib/x86_64-linux-gnu/libgcc_s.so.1
7f4c82440000-7f4c8263f000 ---p 00015000 08:71 1179692 /lib/x86_64-linux-gnu/libgcc_s.so.1
7f4c8263f000-7f4c82640000 r-xp 00014000 08:71 1179692 /lib/x86_64-linux-gnu/libgcc_s.so.1
7f4c82640000-7f4c82641000 rwxp 00015000 08:71 1179692 /lib/x86_64-linux-gnu/libgcc_s.so.1
7f4c82641000-7f4c82b7d000 r-xp 00000000 08:71 2758034 /usr/lib/locale/locale-archive
7f4c82b7d000-7f4c82b7f000 r-xp 00000000 08:71 1179677 /lib/x86_64-linux-gnu/libdl-2.13.so
7f4c82b7f000-7f4c82d7f000 ---p 00002000 08:71 1179677 /lib/x86_64-linux-gnu/libdl-2.13.so
7f4c82d7f000-7f4c82d80000 r-xp 00002000 08:71 1179677 /lib/x86_64-linux-gnu/libdl-2.13.so
7f4c82d80000-7f4c82d81000 rwxp 00003000 08:71 1179677 /lib/x86_64-linux-gnu/libdl-2.13.so
7f4c82d81000-7f4c82f16000 r-xp 00000000 08:71 1179676 /lib/x86_64-linux-gnu/libc-2.13.so
7f4c82f16000-7f4c83115000 ---p 00195000 08:71 1179676 /lib/x86_64-linux-gnu/libc-2.13.so
7f4c83115000-7f4c83119000 r-xp 00194000 08:71 1179676 /lib/x86_64-linux-gnu/libc-2.13.so
7f4c83119000-7f4c8311a000 rwxp 00198000 08:71 1179676 /lib/x86_64-linux-gnu/libc-2.13.so
7f4c8311a000-7f4c83120000 rwxp 00000000 00:00 0
7f4c83120000-7f4c831a3000 r-xp 00000000 08:71 1179686 /lib/x86_64-linux-gnu/libm-2.13.so
7f4c831a3000-7f4c833a2000 ---p 00083000 08:71 1179686 /lib/x86_64-linux-gnu/libm-2.13.so
7f4c833a2000-7f4c833a3000 r-xp 00082000 08:71 1179686 /lib/x86_64-linux-gnu/libm-2.13.so
7f4c833a3000-7f4c833a4000 rwxp 00083000 08:71 1179686 /lib/x86_64-linux-gnu/libm-2.13.so
7f4c833a4000-7f4c833c8000 r-xp 00000000 08:71 2766045 /usr/lib/x86_64-linux-gnu/libjpeg.so.62.0.0
7f4c833c8000-7f4c835c7000 ---p 00024000 08:71 2766045 /usr/lib/x86_64-linux-gnu/libjpeg.so.62.0.0
7f4c835c7000-7f4c835c8000 r-xp 00023000 08:71 2766045 /usr/lib/x86_64-linux-gnu/libjpeg.so.62.0.0
7f4c835c8000-7f4c835c9000 rwxp 00024000 08:71 2766045 /usr/lib/x86_64-linux-gnu/libjpeg.so.62.0.0
7f4c835c9000-7f4c835ed000 r-xp 00000000 08:71 2757372 /usr/lib/libdvdread.so.4.1.3
7f4c835ed000-7f4c837ec000 ---p 00024000 08:71 2757372 /usr/lib/libdvdread.so.4.1.3
7f4c837ec000-7f4c837ed000 r-xp 00023000 08:71 2757372 /usr/lib/libdvdread.so.4.1.3
7f4c837ed000-7f4c837ee000 rwxp 00024000 08:71 2757372 /usr/lib/libdvdread.so.4.1.3
7f4c837ee000-7f4c8380f000 r-xp 00000000 08:71 1179683 /lib/x86_64-linux-gnu/ld-2.13.so
7f4c839ef000-7f4c839f3000 rwxp 00000000 00:00 0
7f4c83a0c000-7f4c83a0e000 rwxp 00000000 00:00 0
7f4c83a0e000-7f4c83a0f000 r-xp 00020000 08:71 1179683 /lib/x86_64-linux-gnu/ld-2.13.so
7f4c83a0f000-7f4c83a11000 rwxp 00021000 08:71 1179683 /lib/x86_64-linux-gnu/ld-2.13.so
7fff59c6e000-7fff59c8f000 rwxp 00000000 00:00 0 [stack]
7fff59dc4000-7fff59dc5000 r-xp 00000000 00:00 0 [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall]
Abortado

Es necesario actualizar la versión, utilizando preferiblemente ésta.

h1

Error compilando kissdx, strip ‘kissdx.exe’ No such file

18/12/2011

Si al compilar el software Kissdx (utilidad epara poder montar un servidor de streaming en Linux para los DVDs de Kiss/Linksys), se produce el siguiente error:

gcc -DLinux -DUSE_INTERNAL_SENDFILE -std=gnu99 -O2 -Wall -Wstrict-prototypes -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -c -o gdstuff/gd_security.o gdstuff/gd_security.c
gcc -o kissdx kissdx.o connection.o sendfile.o dvdread.o playlist.o jpeg.o piccache.o utils.o config.o backtoback.o cmdclient.o cmdserver.o gdstuff/gdstuff.o gdstuff/gd.o gdstuff/gdfontg.o gdstuff/gd_jpeg.o gdstuff/gdhelpers.o gdstuff/gd_io_dp.o gdstuff/gd_io.o gdstuff/gd_security.o -ldvdread -ljpeg -lm
strip kissdx.exe
strip: 'kissdx.exe': No such file
make: *** [kissdx] Error 1

Ocurre por un bug en el Makefile, que referencia a un fichero de salida que no existe. La solución consiste en apenas cambiar en el Makefile el nombre del binario de salida, de «kissdx.exe» a «kissdx»:

$nano Makefile
strip kissdx.exe
strip kissdx

h1

Error /usr/bin/ld: cannot find -liconv compilando Kissdx

18/12/2011

Si al compilar el software Kissdx (utilidad epara poder montar un servidor de streaming en Linux para los DVDs de Kiss/Linksys), se produce el siguiente error:

gcc -DLinux -DUSE_INTERNAL_SENDFILE -std=gnu99 -O2 -Wall -Wstrict-prototypes -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -c -o gdstuff/gd_io.o gdstuff/gd_io.c
gcc -DLinux -DUSE_INTERNAL_SENDFILE -std=gnu99 -O2 -Wall -Wstrict-prototypes -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -c -o gdstuff/gd_security.o gdstuff/gd_security.c
gcc -o kissdx kissdx.o connection.o sendfile.o dvdread.o playlist.o jpeg.o piccache.o utils.o config.o backtoback.o cmdclient.o cmdserver.o gdstuff/gdstuff.o gdstuff/gd.o gdstuff/gdfontg.o gdstuff/gd_jpeg.o gdstuff/gdhelpers.o gdstuff/gd_io_dp.o gdstuff/gd_io.o gdstuff/gd_security.o -ldvdread -liconv -ljpeg -lm
/usr/bin/ld: cannot find -liconv
collect2: ld devolvió el estado de salida 1
make: *** [kissdx] Error 1

Es debido a que esa opción, en sistemas basados en Debian (como Ubuntu) es necesario quitarla. Para ello editar el fichero Makefile comentando la línea que incluye el parámetro «-liconv», y descomentando la siguiente (que no lo lleva), quedando de la siguiente manera:
$ nano Makefile
(...)
# $(CC) -o $@ $(OBJS) -ldvdread -liconv -ljpeg -lm $(EXTRA_LIBS)
$(CC) -o $@ $(OBJS) -ldvdread -ljpeg -lm $(EXTRA_LIBS)
(...)

Y comenzar desde cero borrando la anterior compilación:
$ make clean
$ sudo make
$ sudo make install

h1

error GTK+ 2 not found

13/11/2011

Si compilando un software, por ejemplo aMule, ocurre este error:

checking for GTK+ - version >= 2.0.0... no
*** A new enough version of pkg-config was not found.
*** See http://pkgconfig.sourceforge.net
configure: error:
The development files for GTK+ were not found. For GTK+ 2, please
ensure that pkg-config is in the path and that gtk+-2.0.pc is
installed. For GTK+ 1.2 please check that gtk-config is in the path,
and that the version is 1.2.3 or above. Also check that the
libraries returned by 'pkg-config gtk+-2.0 --libs' or 'gtk-config
--libs' are in the LD_LIBRARY_PATH or equivalent.

en vez de descargar las librerías y compilarlas, se puede descargar el siguiente paquete:

sudo apt-get install libgtk2.0-dev

h1

Python: error «No module named PySide.QtCore» y compatibilidad Qt

04/05/2011

Revisión (octubre de 2026): el ejemplo es de 2011 y corresponde a la primera generación de PySide y aplicaciones Python antiguas. No añadas repositorios PPA obsoletos ni ejecutes apt-get install python-pyside* sin comprobar antes la versión de Python y los paquetes disponibles.

Verifica qué intérprete ejecuta el script, si utiliza un entorno virtual y para qué versión de Qt fue escrito. Una aplicación que importa PySide.QtCore puede requerir adaptación de código para usar PySide2 o PySide6; instalar una biblioteca nueva no garantiza que funcione sin cambios.

Relacionado: tutoriales de programación y desarrollo.


Si con backup-gmail u otro script Python ocurre el siguiente error:

carlos@adscompc02:~/bg/backup-gmail$ ./gui.py
Traceback (most recent call last):
File "./gui.py", line 10, in
from PySide.QtCore import *
ImportError: No module named PySide.QtCore

Éste se soluciona instalando el repositorio y librería correspondiente:

$ sudo add-apt-repository ppa:pyside
$ sudo apt-get install python-pyside*