我有一个用户空间程序(Capstone)。我想在FreeBSD内核中使用它。我相信它们中的大多数都具有相同的函数名,语义和参数(在FreeBSD中,内核printf
也被命名为printf
)。首先,我将其构建为libcapstone.a
库,并将其与程序链接。由于Linux用户空间和FreeBSD内核之间的包含文件不同,因此库无法找到sprintf
,memset
和vsnprintf
等符号。我怎样才能将这些符号(来自FreeBSD内核)显示为libcapstone.a
?
如果在Linux用户空间源代码中直接包含<sys/systm.h>
等头文件,则错误就像undefined type u_int or u_char
,即使我将-D_BSD_SOURCE
添加到CFLAGS
。< / p>
此外,还有其他更好的方法吗?
答案 0 :(得分:0)
你还需要;看看内核手册页,例如&#34; man 9 printf&#34;。他们在顶部列出了所需的包含。
但是,请注意,您正在努力尝试真的。一些基本功能(例如printf)可能存在;其他完全不同(例如malloc(9)),大多数POSIX API都不存在。你不可能使用open(2),socket(2)或fork(2)。