我正在与Xenomai和RTnet合作开发两个Beaglebone Black。我在BBB之间有两个用于往返以太网帧的c文件。当我尝试编译第一个C文件时,会发生一些错误:
对“ rt_task_self”的未定义引用
rt_task_self是我的c文件中的一个函数,并在我的头文件“ task.h”中声明。因此,我认为“未定义”意味着在头文件“ task.h”的任何cpp文件“ task.cpp”中都未定义它。
但是我有些困惑:如何告诉程序我的头文件“ task.h”是在其他文件“ task.cpp”或“ task.o”中定义的还是... 我的C文件中有很多头文件,但“ task.h”文件只有一个错误,并且在“ task.h”和所有其他头文件之间的#include行中没有看到任何区别。
往返C文件的一部分:
let $dir := (
let $current := map:map()
let $_ := map:put($current, "element", "")
for $uri in cts:uris()
let $toks := fn:tokenize($uri, "/")
let $element := if (map:get($current, "element") ne $toks[2]) then element directory { $toks[2] } else ()
let $_ := map:put($current, "element", $toks[2])
return if ($element/text() ne "") then $element else ()
)
let $doc := document { element root { $dir } }
return $doc
task.h的一部分:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <sys/time.h>
#include <unistd.h>
/*XENOMAI*/
#include "task.h"
#include <rtdm/rtdm.h>
#include <asm/ioctl.h>
#define SERVER "192.168.127.10"
#define BUFLEN 512
#define PORT 8888
void die(char *s)
{
perror(s);
exit(1);
}
往返c文件中另一个头文件的一部分:
#ifndef _XENO_TASK_H
#define _XENO_TASK_H
#include <nucleus/sched.h>
#include <native/types.h>
/* Creation flags. */
#define T_FPU XNFPU
#define T_SUSP XNSUSP
/* <!> High bits must not conflict with XNFPU|XNSHADOW|XNSUSP. */
#define T_CPU(cpu) (1 << (24 + (cpu & 7))) /* Up to 8 cpus [0-7] */
#define T_CPUMASK 0xff000000
我的制作文件:
#ifndef _RTDM_H
#define _RTDM_H
#ifdef __KERNEL__
#include <linux/types.h>
#include <linux/fcntl.h>
#include <linux/ioctl.h>
#include <linux/sched.h>
#include <linux/socket.h>
typedef u32 socklen_t;
typedef struct task_struct rtdm_user_info_t;
#else /* !__KERNEL__ */
#include <fcntl.h>
#include <stddef.h>
#include <stdint.h>
#include <sys/ioctl.h>
#include <sys/socket.h>