Tengo el siguiente programa de prueba.referencia indefinida a `pthread_mutex_trylock '
#include <iostream>
#include <cstdlib>
using namespace std;
pthread_mutex_t mymutex = PTHREAD_MUTEX_INITIALIZER;
int main(int argc, char *argv[])
{
int iret;
iret = pthread_mutex_trylock(& mymutex);
cout << "Test2 !!! " << endl;
pthread_mutex_unlock(& mymutex);
return EXIT_SUCCESS;
}
Si puedo compilar sin la adición de la biblioteca pthread consigo el error para el error sin solución por pthread_mutex_trylock, pero sólo para pthread_mutex_trylock función.
Si reemplazo pthread_mutex_trylock con pthread_mutex_trylock, el programa se compila y ejecuta bien también sin la opción -lpthread *.
Si agrego la opción -lpthraed a la compilación manda a todos los funcionamientos así esta carrera así: $ g ++ test2.c -o test2 -lpthread esta advierten sin resolver: $ g ++ test2.c -o test2
salida de errorEjemplo: $ g ++ test2.c -o test2 /tmp/ccU1bBdU.o: En función main': test2.c:(.text+0x11): undefined reference to
pthread_mutex_trylock' collect2: ld volvió 1 estado de salida
Si sustituyo el instructi en iret = pthread_mutex_trylock (& mymutex);
con iret = pthread_mutex_lock (& mymutex); el programa se compila y se ejecuta sin error también si no se agregó pthread libarry al comando de compilación Sé que es correcto tener el error sin resolver si no usé la opción -lpthread, pero por qué no tengo el mismo error no resuelto también para otra función pthread_?
estoy usando gcc 4.4.2 en Fedora 12
$ g++ --version
g++ (GCC) 4.4.2 20091222 (Red Hat 4.4.2-20)
Copyright (C) 2009 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
hacer algunos tienen alguna sugerencia sobre el significado de esta Deshacer referencia sólo para pthread_mutex_trylock?
gracias por la ayuda, Enzo
Eso podría ser un comportamiento específico de la plataforma, pero ¿por qué te molestas? Se supone que debes enlazar con pthread, solo hazlo. –
mybe Todavía tengo ganas de aprender :) – enzo2
Sin embargo, esta pregunta es útil en una situación como la mía, donde una llamada a 'pthread_mutex_lock()' fue reemplazada por 'pthread_mutex_trylock()' causando que las cosas se rompan sin ninguna razón obvia. – foraidt