2009-07-08 8 views
0

J'ai un peu de code qui a utilisé pthread_cond_wait qui ressemble à ceci:pthread_cond_timedwait Erreur de lien avec clock_gettime sur Solaris 10

struct timespec ts; 
clock_getttime(CLOCK_REALTIME, &timS); 
ts.tv_sec += delay; 

pthread_mutex_lock(&a_mutex); 
    pthread_cond_timedwait(&thread_cond, &a_mutex,&timS); 
pthread_mutex_unlock(&a_mutex); 

Mais je reçois une erreur de liaison sur la compilation,

symbole non défini clock_gettime .. premier référencé dans (le fichier avec ce code)

C'est la seule erreur de lien que j'obtiens; si je commente ce bloc de code compilé, la bibliothèque pthread est en cours de chargement. J'ai lu quelque part que j'avais besoin du drapeau -lc, ce que j'ai fait, mais il semble que je doive définir quelque chose d'autre.

Est-ce que quelqu'un sait quoi?

Ceci est sous Solaris 10, en utilisant le compilateur 5.8 de Sun.

Répondre

2

La réponse -lc est erronée. Vous devez ajouter -lrt (vraisemblablement temps réel ..?)

1

Sur la ligne de commande, essayez "man clock_getttime" ou "man -k clock_getttime". Cela vous donnera la bibliothèque à lier. Ensuite, incluez cette ligne dans votre g ++ -L/chemin/vers/lib -lNomOuLib (ou dans le fichier make comme indicateur de lien)

Les API Solaris Unix sont parfois différentes des fonctions Unix standard.

+0

Merci, mais je me suis dit, en tapant "clock_gettime solaris" dans Google. Je l'ai manqué la première fois parce que j'étais trop spécifique. Le bit '-lrt' est mentionné dans la page de manuel du Sun sous Synopsis. Mais maintenant je sais :-) –

+1

En fait, POSIX 1003.1b exige que 'clock_gettime' soit fourni' -lrt', donc cela devrait être le même quel que soit UNIX vous êtes sur, à moins que ce ne soit pas conforme. – ephemient

Questions connexes