使 strlcpy 在 linux 中可用

Making strlcpy available in linux

我正在尝试编译最初为 FreeBSD 编写的源代码,自 strlcpy isn't included in the linux GlibC 以来,我现在停在了这个阶段。

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

我需要重新编译我的 LibC 吗?

感谢任何帮助。

您可以从 https://github.com/freebsd/freebsd/blob/master/sys/libkern/strlcpy.c 下载源代码并将其添加到您的源代码中并进行 2 次修改:

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

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

移植BSD应用程序的最佳解决方案是libbsd;并且它已经为大多数系统打包。

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

您可以通过将以下内容添加到您的 CFLAGS 来编译未修改的 BSD 源代码: -DLIBBSD_OVERLAY -I/usr/include/bsd,并链接到 -lbsd

但是,如果您打算分发您的构建系统,您应该将 pkg-configlibbsd-overlay 包一起使用,而不是对这些值进行硬编码。