Я дал -lrt
как последний флаг компоновщика компилятору. Но все равно получить эту ошибку.Неопределенная ссылка на `clock_gettime` хотя` -lrt` дана
[email protected]:~/sak/sak.exosip$ gcc eXo_init.c -I/opt/osip2/include -I/opt/exosip/include -L/opt/osip2/lib -L/opt/exosip/lib -leXosip2 -losipparser2 -losip2 -lrt
/opt/osip2/lib/libosip2.so: undefined reference to `clock_gettime'
collect2: ld returned 1 exit status
Страница человек говорит:
NAME
clock_getres, clock_gettime, clock_settime - clock and time functions
SYNOPSIS
#include <time.h>
int clock_getres(clockid_t clk_id, struct timespec *res);
int clock_gettime(clockid_t clk_id, struct timespec *tp);
int clock_settime(clockid_t clk_id, const struct timespec *tp);
Link with -lrt.
Так я вроде запутался, где я делаю это неправильно.
Я пытался читать символы в librt.so
не повезло:
[email protected]:~/sak/ortp/src/tests$ nm /lib/x86_64-linux-gnu/librt-2.15.so
nm: /lib/x86_64-linux-gnu/librt-2.15.so: no symbols
UPDATE 1 Причина я не могу читать символы из librt.so
является то, что они «раздели». Где я могу получить имена символов?
[email protected]:~/sak/ortp/src/tests$ file /lib/x86_64-linux-gnu/librt-2.15.so
/lib/x86_64-linux-gnu/librt-2.15.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), BuildID[sha1]=0x375b2c35c4e6503a5d1a88ab6f76f5b6e0ee81df, for GNU/Linux 2.6.24, stripped
UPDATE 2
Ну вещи становятся очень запутанным, так как следующий тестовый код компилирует и работает просто отлично:
#include <time.h>
#include <unistd.h>
#include <stdio.h>
int main(int argc, char **argv, char **arge) {
struct timespec tps, tpe;
if ((clock_gettime(CLOCK_REALTIME, &tps) != 0)
|| (clock_gettime(CLOCK_REALTIME, &tpe) != 0)) {
perror("clock_gettime");
return -1;
}
printf("%lu s, %lu ns\n", tpe.tv_sec-tps.tv_sec,tpe.tv_nsec-tps.tv_nsec);
return 0;
}
Построенный с
[email protected]:~/sak/sak.exosip$ gcc what.c -lrt
Update3 Код я пытаюсь скомпилировать:
#include <eXosip2/eXosip.h>
#include <netinet/in.h>
#include <unistd.h>
int ex_init(int port)
{
struct eXosip_t *eXcontext;
int i;
TRACE_INITIALIZE(6, stdout);
i = eXosip_init(eXcontext);
if (i != 0)
return -1;
i = eXosip_listen_addr(eXcontext, IPPROTO_UDP, NULL, port, AF_INET, 0);
if (i != 0) {
eXosip_quit(eXcontext);
fprintf (stderr, "could not initialize transport layer\n");
return -1;
}
return 1;
}
int main(int argc, char **argv) {
if(ex_init(1000))
printf("success \n");
return 0;
}
Не могли бы вы дать нам оригинальный оскорбительный код? Спасибо – Mathuin
Мне не нужно много работать с gcc cmd-строками, но поможет ли это переместить ссылку на '-lrt' ближе к фронту линии cmd? Удачи. – shellter
@ MatthR3D, как вы просили. Как вы можете видеть, это очень тривиальный код. – Aftnix