2017-11-22 3 views
0

2.6.39 커널을 실행하는 임베디드 장치 솔루션에서 timerfd를 사용하려고하지만 크로스 컴파일러가 너무 오래된 glibc (2.5)를 사용합니다. Timerfd는 2.6.25 이후에 존재하지만 glibc 이후 2.8이전 glibc와 함께 Linux syscall 사용

최신 glibc에서 헤더 파일을 사용하려고하면 컴파일러에서 extern timerfd_create (undefined reference to 'timerfd_create')를 찾지 못한다고 불평하지만 구현을 찾을 수 없습니다. glibc 어디서나.

지금 내 질문은 어떻게 이전의 glibc 버전에 관계없이 timerfd를 사용할 수 있습니까? 수동으로 syscall을 호출해야합니까? 그렇다면 어떻게해야합니까?

+0

, 왜 – hellow

답변

1

glibc에서 구현을 찾을 수 없습니다.

는 여기를 찾는 데 트릭 : libc6 내-DBG가 설치된 :

gdb -q /lib/x86_64-linux-gnu/libc.so.6 
(gdb) list timerfd_create 
61 ../sysdeps/unix/syscall-template.S: No such file or directory. 

이 구현은 시스템 호출을 통해 커널에 직접 인수를 전달하는 것입니다 있음을 알려줍니다.

귀하의 구현은 할 수 있습니다 : 당신이 나에게 downvote을주는 경우에

#include <unistd.h> 
#include <syscall.h> 

#ifndef __NR_timerfd_create 
#define __NR_timerfd_create 283 
int timerfd_create(int clockid, int flags) 
{ 
    return syscall(__NR_timerfd_create, clockid, flags); 
} 
#endif 
+0

감사를 설명해주십시오. 그 방법으로 해결, 지금 작동 :) – hellow

관련 문제