【发布时间】:2026-02-21 12:50:01
【问题描述】:
我有一个用户空间程序 (Capstone)。我想在 FreeBSD 内核中使用它。我相信它们中的大多数具有相同的函数名、语义和参数(在 FreeBSD 中,内核 printf 也被命名为 printf)。首先,我将它构建为libcapstone.a 库,并将我的程序与它链接起来。由于 Linux 用户空间和 FreeBSD 内核之间的包含文件不同,因此库找不到像 sprintf、memset 和 vsnprintf 这样的符号。我怎样才能使这些符号(来自 FreeBSD 内核)对libcapstone.a 可见?
如果在Linux用户空间源代码中直接包含<sys/systm.h>之类的头文件,即使我将-D_BSD_SOURCE添加到CFLAGS,错误也会类似于undefined type u_int or u_char。
此外,还有其他更好的方法吗?
【问题讨论】:
-
首先你说你想在用户空间程序中使用内核函数。然后你会谈论在内核模块中使用用户空间函数听起来像什么。是哪个?
-
将用户空间程序作为库放入内核。很抱歉造成混乱。
标签: linux linker kernel freebsd static-linking