使 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-config
与 libbsd-overlay
包一起使用,而不是对这些值进行硬编码。
我正在尝试编译最初为 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-config
与 libbsd-overlay
包一起使用,而不是对这些值进行硬编码。