msmsms 1 Report post Posted January 27, 2016 estou a tentar resolver um problema com semáforos mas quando tento utilizar a função sem_init() obtenho erro e diz que tem referência indefinida sabem-me dizer porquê? eu tenho a biblioteca de semáforos incluída #include<semaphore.h> #include<sys/sem.h> ////////////////////////////////////////////////////////////// int pos_escrita; int pos_leitura; ////////////////////////////////////////////////////////////// int buffer[10]; //capacidade para 10 ////////////////////////////////////////////////////////////// pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; sem_t vazio; sem_t cheio; ////////////////////////////////////////////////////////////// // IDs das threads int id_produtores[100]; int id_consumidores[10]; ////////////////////////////////////////////////////////////// void init(){ sem_init(&vazio, 0, 10); sem_init(&cheio, 0, 0); pos_escrita = 0; pos_leitura = 0; } ////////////////////////////////////////////////////////////// int main(){ int i; init(); pthread_t threads[2]; // nº de threads for(i=0; i<10;i++){ } printf("\n"); return 0; } ////////////////////////////////////////////////////////////// o erro da consola: /tmp/ccTcI1EU.o: In function `init': f.c:(.text+0x1e): undefined reference to `sem_init' f.c:(.text+0x3a): undefined reference to `sem_init' collect2: ld returned 1 exit status Share this post Link to post Share on other sites
HappyHippyHippo 1,165 Report post Posted January 27, 2016 eu tenho a biblioteca de semáforos incluída engraçado, porque é exatamente isso que o compilador se está a queixar. e de toda a informação que apresentas, nenhuma é a confirmação do que disseste IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Share this post Link to post Share on other sites
msmsms 1 Report post Posted January 27, 2016 engraçado, porque é exatamente isso que o compilador se está a queixar. e de toda a informação que apresentas, nenhuma é a confirmação do que disseste eu não entendi Share this post Link to post Share on other sites
Colector Boy 1 Report post Posted January 28, 2016 (edited) Penso que tens que linkar a tua biblioteca fazendo algo do género: gcc [lista_argumentos] -lpthread onde lista_argumentos e a lista onde dizes que opções vais utilizar -o, -W, etc, e que ficheiros,.c, .cpp, .o, etc, queres utilizar para gerar o teu executável. Edited January 28, 2016 by Colector Boy Share this post Link to post Share on other sites
msmsms 1 Report post Posted January 28, 2016 Penso que tens que linkar a tua biblioteca fazendo algo do género: gcc [lista_argumentos] -lpthread onde lista_argumentos e a lista onde dizes que opções vais utilizar -o, -W, etc, e que ficheiros,.c, .cpp, .o, etc, queres utilizar para gerar o teu executável. obrigado Share this post Link to post Share on other sites
Colector Boy 1 Report post Posted January 28, 2016 (edited) De nada. Espero que tenhas conseguido resolver o problema. Edited January 28, 2016 by Colector Boy Share this post Link to post Share on other sites
msmsms 1 Report post Posted January 30, 2016 (edited) De nada. Espero que tenhas conseguido resolver o problema. existe algum forma de eu não ser obrigado a utilizar o -pthread na compilação do program? ou seja, existe forma de eu incluir alguma instrução no corpo do meu código para que o comando: gcc prog.c continue a funcionar mesmo estando a trabalhar com threads e semáforos? Edited January 30, 2016 by msmsms Share this post Link to post Share on other sites
HappyHippyHippo 1,165 Report post Posted January 31, 2016 não IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Share this post Link to post Share on other sites