Как определить неопределенную ссылку на функцию - PullRequest
0 голосов
/ 22 мая 2019

Я работаю над двумя Beaglebone Black с Xenomai и RTnet.У меня есть два c-файла для кадра Ethernet туда-обратно между BBB.Когда я пытаюсь скомпилировать первый c-файл, возникают некоторые ошибки:

неопределенная ссылка на 'rt_task_self'

rt_task_self является функцией в моем c-файле и объявлена ​​в моей задаче headerfile ".час".Так что, по моему мнению, «undefined» означает, что он не определен ни в одном cpp-файле «task.cpp» для файла заголовка «task.h».

Но я немного запутался: как мнескажите моей программе, что мой файл заголовка "task.h" определен в моем другом файле "task.cpp" или "task.o" или ... У меня много файлов заголовков в моем C-файле, но только ошибка с моей задачей.h ", и я не вижу различий в строках #include между моим" task.h "и всеми остальными заголовочными файлами.

Часть C-файла Roundtrip:

#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);
}

Часть файла task.h:

#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

Часть другого заголовочного файла в c-файле туда и обратно:

#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>

Мой make-файл:

# Allow overriding xeno-config on make command line
XENO_CONFIG=xeno-config

prefix := $(shell $(XENO_CONFIG) --prefix)

ifeq ($(prefix),)
$(error Please add <xenomai-install-path>/bin to your PATH variable)
endif

CC := $(shell $(XENO_CONFIG) --skin=posix --cc)
STD_CFLAGS  := $(shell $(XENO_CONFIG) --skin=posix --cflags) -g
STD_LDFLAGS := $(shell $(XENO_CONFIG) --skin=posix --ldflags) -g -lrtdm

STD_TARGETS := rtt_rt

all: $(STD_TARGETS)

$(STD_TARGETS): $(STD_TARGETS:%=%.c)
    $(CC) -o $@ $< $(STD_CFLAGS) $(STD_LDFLAGS)

clean:
    $(RM) -f *.o *~ $(STD_TARGETS) 

...