Неопределенная ссылка на функции POSIX при импорте - PullRequest
0 голосов
/ 16 февраля 2020

Я просто создаю тему с таймером. Даже если я импортирую все библиотеки, которые мне нужны. Он продолжает говорить, что нет никаких ссылок на функции.

Точно говорится, что timer_create(...) и timer_settime(...) не имеют ссылок.

Это мой импорт:

#include <stdio.h>
#include <stddef.h>
#include <sched.h>
#include <sys/mman.h>
#include <sys/time.h>
#include <signal.h>
#include <unistd.h>
#include <stdlib.h>
#include <pthread.h>
#include <time.h>

И это поток, где я использую эти функции:

void *Turismo(){
    const struct timespec periodo = {per_turismos_sec,per_turismos_nsec};
    struct sigevent event;
    timer_t timer;
    struct itimerspec its;
    sigset_t sigset;
    int signum;

    event.sigev_notify = SIGEV_SIGNAL;
    event.sigev_signo = SIGRTMAX;
    event.sigev_value.sival_ptr = &timer;

    if(timer_create(CLOCK_MONOTONIC,&event,&timer)!=0) error();

    its.it_interval = periodo;
    its.it_value.tv_sec = 0;
    its.it_value.tv_nsec = 1;

    if(timer_settime(timer,0,&its,NULL)<0) error();
    if(sigemptyset(&sigset)<0) error();
    if(sigaddset(&sigset,SIGRTMAX)<0) error();


    while(1){
        sigwait(&sigset,&signum);
        // ESPECIFICACION DE LA TAREA

    }

    if(timer_delete(timer)<0) error();
    return NULL;
}

Код не завершен, чтобы упростить исправление .

Для компиляции я использую следующую команду:

gcc -o ejer1 ejer1.c -lpthread

Буду признателен за помощь. Спасибо!

1 Ответ

6 голосов
/ 16 февраля 2020

Существует два этапа создания программы

  • Компиляция
  • Связывание

На этапе compilation необходимо знать объявление функций и структур для создания .o файлов.

На этапе linkage требуется фактическая реализация функций.

Неопределенная ссылка * Ошибка 1019 * говорит о том, что компоновщик не может найти реализацию функций.

Поскольку вы используете стороннюю библиотеку, вам нужно связать эту библиотеку клавишей -l.

Чтобы проверить если в библиотеке есть символ, вы можете выполнить

$ nm -gD /usr/lib/x86_64-linux-gnu/librt.so | grep timer_create
0000000000004520 T timer_create
00000000000042a0 T timer_create

. В вашем случае вам нужно связать библиотеку rt с помощью клавиши -lrt.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...