让strlcpy在linux中可用

问题描述 投票:1回答:2

我正在尝试编译一个源代码,这个源代码最初是为 FreeBSD 而既然 strlcpy不包含在linux GlibC中。 ,我现在停在这个阶段。

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

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

希望得到任何帮助。

linux gcc freebsd glibc
2个回答
3
投票

移植BSD应用程序的最佳解决方案是 libbsd而它已经被打包到大多数系统中。

在基于Debian的系统中,开发包的名字是 libbsd-dev.

你可以通过在你的CFLAGS中加入以下内容来编译未经修改的BSD源代码。-DLIBBSD_OVERLAY -I/usr/include/bsd,并与 -lbsd.

然而,与其硬编码这些值,你应该使用 pkg-config 随着 libbsd-overlay 包,如果你打算发布你的构建系统。


1
投票

你可以从 https:/github.comfreebsdfreebsdblobmastersyslibkernstrlcpy.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成功编译了这个函数。

© www.soinside.com 2019 - 2024. All rights reserved.