# 交叉编译器设置
CC := $(X_GCC_ROOT_PATH)/bin/x86_64-sinsegye-linux-gnu-gcc
CXX := $(X_GCC_ROOT_PATH)/bin/x86_64-sinsegye-linux-gnu-g++
SYSROOT := $(X_GCC_ROOT_PATH)/x86_64-sinsegye-linux-gnu/sysroot
# 目录设置
SRC_DIR := src
BUILD_DIR := build
BIN_DIR := bin
# 构建文件选择
SOURCES := $(wildcard $(SRC_DIR)/*.c)
OBJECTS := $(patsubst $(SRC_DIR)/%.c,$(BUILD_DIR)/%.o,$(SOURCES))
TARGET := $(BIN_DIR)/hello
# 编译选项
CFLAGS := --sysroot=$(SYSROOT) -I$(SYSROOT)/usr/include
LDFLAGS := --sysroot=$(SYSROOT) -L$(SYSROOT)/usr/lib -L$(SYSROOT)/lib64 \
$(CUSTOM_LIBS)
-Wl,--no-as-needed -Wl,@$(SYSROOT)/usr/lib64/cobalt.wrappers \
-Wl,@$(SYSROOT)/usr/lib64/modechk.wrappers \
-Wl,--dynamic-list=$(SYSROOT)/usr/lib64/dynlist.ld \
-lcobalt -lmodechk -lm -ldl -lrt -lpthread
# Rules
.PHONY: all clean
all: $(TARGET)
$(TARGET): $(OBJECTS) | $(BIN_DIR)
$(CC) $(LDFLAGS) -o $@ $^
$(BUILD_DIR)/%.o: $(SRC_DIR)/%.c | $(BUILD_DIR)
$(CC) $(CFLAGS) -o $@ -c $<
$(BIN_DIR) $(BUILD_DIR):
mkdir -p $@
clean:
rm -rf $(BUILD_DIR) $(BIN_DIR)
# End of Makefile
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sched.h>
// 线程函数
void* thread_function(void* arg) {
char thread_name[16];
pthread_getname_np(pthread_self(), thread_name, sizeof(thread_name));
printf("Thread %s is running with FIFO scheduling, priority 88\n", thread_name);
// 执行一些工作
for (int i = 0; i < 500; i++) {
printf("Thread %s is working...\n", thread_name);
sleep(1); // 模拟工作
}
return NULL;
}
int main() {
pthread_t thread_id;
pthread_attr_t attr;
struct sched_param param;
// 初始化线程属性
pthread_attr_init(&attr);
// 设置线程调度策略为 FIFO
pthread_attr_setschedpolicy(&attr, SCHED_FIFO);
// 设置线程优先级
param.sched_priority = 88;
pthread_attr_setschedparam(&attr, ¶m);
// 允许设置调度策略和参数
pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED);
// 创建线程
pthread_create(&thread_id, &attr, thread_function, NULL);
pthread_setname_np(thread_id, "WorkerThread");
// 等待线程结束
pthread_join(thread_id, NULL);
// 销毁线程属性对象
pthread_attr_destroy(&attr);
printf("Main thread is done.\n");
return 0;
}
进入到demo_project目录
cd C:\Users\someone\Desktop\demo_project
确定交叉编译器工具链路径,假设交叉编译器路径为C:\Users\someone\Desktop\xgcc\x86_64-sinsegye-linux-gnu
make X_GCC_ROOT_PATH=C:\Users\someone\Desktop\xgcc\x86_64-sinsegye-linux-gnu