我正在尝试使用 CMake 和 clang + lld ( http://releases.llvm.org/ ) + mingw ( https://sourceforge )编译 SDL2 ( https://www.libsdl.org/download-2.0.php ) .net/projects/mingw-w64/ ) 头文件在 Windows 10 上。尽管我做了很多努力,但我似乎无法让 CMake 通过 mingw ld 链接器使用 lld 链接器。
我目前使用批处理文件构建 sdl2:
@ECHO OFF
IF NOT EXIST build MKDIR build
PUSHD build
cmake.exe -DCMAKE_BUILD_TYPE=Debug -G "MinGW Makefiles"^
-DCMAKE_C_FLAGS="-target x86_64-windows-gnu"^
-DCMAKE_C_COMPILER_ID="Clang" -DCMAKE_C_COMPILER="clang.exe"^
-DCMAKE_CXX_FLAGS="-target x86_64-windows-gnu"^
-DCMAKE_CXX_COMPILER_ID="Clang++" -DCMAKE_CXX_COMPILER="clang++.exe"^
-DDIRECTX=OFF -DSDL_TEST=OFF -DSDL_SHARED=OFF -DSDL_STATIC=ON ..
cmake.exe --build . -- -j %NUMBER_OF_PROCESSORS%
POPD
Run Code Online (Sandbox Code Playgroud)
我试过无济于事:
环境 -fuse-ld=lld.exe
环境 LDFLAGS=lld.exe
环境 -DCMAKE_LINKER=lld.exe
解决方案来自:CMake:使用自定义链接器
任何帮助将不胜感激。
我的笔记本电脑连接了 2 个键盘(内置键盘和 USB 键盘)。我正在获取这些连接的键盘并libudev使用epoll它们通过接口轮询输入evdev:
// Compile with $(gcc udev.c -ludev)
#include <stdbool.h>
#include <stdio.h>
#include <string.h>
#include <sys/epoll.h>
#include <sys/poll.h>
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>
#include <linux/input.h>
#include <time.h>
#include <libudev.h>
#define BILLION 1000000000L
long timespec_diff(struct timespec *start, struct timespec *end)
{
return (BILLION * (end->tv_sec - start->tv_sec)) +
(end->tv_nsec - start->tv_nsec);
}
bool want_to_run = true;
int
main(int argc, char *argv[])
{
int epoll_fd = epoll_create1(0);
struct udev *udev_obj = udev_new(); …Run Code Online (Sandbox Code Playgroud) 基本的 Hello World 就像之前在 x86_64 Linux 上多次看到的那样:
global my_start_symbol
section .my_section
my_start_symbol:
mov rax, 1
mov rdi, 1
mov rsi, msg
mov rdx, msg_len
syscall
mov rax, 60
xor rdi, rdi
syscall
section .rodata:
msg: db "Hello, world!", 10
msg_len: equ $ - msg
Run Code Online (Sandbox Code Playgroud)
我当前的ld链接器脚本:
__linux_mmap_min_addr = 0x10000;
ENTRY(my_start_symbol)
MEMORY
{
rom (rx) : ORIGIN = 0, LENGTH = 512K
}
SECTIONS
{
. = __linux_mmap_min_addr;
.my_section :
{
*(.my_section*)
} > rom
.rodata :
{
*(.rodata*)
} …Run Code Online (Sandbox Code Playgroud)