使strlcpy在linux中可用

使strlcpy在linux中可用,linux,gcc,freebsd,glibc,Linux,Gcc,Freebsd,Glibc,我正在尝试编译一个源代码,它最初是为FreeBSD编写的,从那时起,我就停止在这个阶段 GCC建议我可以使用,但我不想实际更改源代码 我需要重新编译我的LibC吗 非常感谢您的帮助。您可以从下载源代码,并对源代码进行2次修改后添加: $ diff strlcpy.c strlcpy.c.orig 20c20 < //__FBSDID("$FreeBSD$"); --- > __FBSDID("$FreeBSD$"); 23c23 < //#include <sys/li

我正在尝试编译一个源代码,它最初是为
FreeBSD
编写的,从那时起,我就停止在这个阶段

GCC建议我可以使用,但我不想实际更改源代码

我需要重新编译我的LibC吗


非常感谢您的帮助。

您可以从下载源代码,并对源代码进行2次修改后添加:

$ diff strlcpy.c strlcpy.c.orig 
20c20
< //__FBSDID("$FreeBSD$");
---
> __FBSDID("$FreeBSD$");
23c23
< //#include <sys/libkern.h>
---
> #include <sys/libkern.h>
$diff strlcpy.c strlcpy.c.orig
20c20
_uufbsdid($FreeBSD$);
23c23
#包括

我已经在Ubuntu 18.04上用gcc 7.5.0成功编译了这个函数。

端口BSD应用程序的最佳解决方案是;而且它已经为大多数系统打包

在基于Debian的系统上,开发包名为
libbsd-dev

通过向CFLAGS中添加以下内容,可以编译未修改的BSD源代码:
-DLIBBSD\u OVERLAY-I/usr/include/bsd
,并与
-lbsd
链接


但是,如果您打算分发生成系统,则应使用
libbsd overlay
包使用
pkg config
而不是硬编码这些值。

是否包含正确的标题@KamilCuk问题在于:在BSD中,“#include”中的“BSD/”部分是不必要的(事实上是禁止的)。但是我没有BSD版本的string.h。所以我正在寻找一种安装它的方法。这样我就可以找到string.h的BSD版本并将它放在某个地方,最后在makefile的“CFLAGS”中添加一些标志。难道你没有
/usr/include/BSD/string.h
?然后使用linux分发包管理器安装它们。在我的archlinux上,它属于
extra/libbsd
package。@ParsaMousavi:您可以使用
apt file
找出哪个(卸载的)包包含文件。它非常有用
apt file search/usr/include/bsd/string.h
报告文件在包
libbsd dev
中,正如Ismael的回答所说。我也使用带有gcc 7.5的ubuntu 18.04服务器。谢谢