使用off_t作为一个函数(seek)参数的库。库和应用程序的编译方式不同,一种是关闭大文件支持,另一种是关闭大文件支持。这种情况会导致奇怪的运行时错误,因为两者的解释不同。库如何在运行时检查应用程序的off_t大小?或者还有其他的解决方案,这样至少用户会得到一个有意义的错误?
编辑:库(用C编程,用AutoCONF)已经存在,一些第三方应用程序使用它。库可以使用大文件支持进行编译(默认情况下通过AC_SYS_large file)。它是多平台的,不仅仅是linux。如何检测/防止已安装的应用程序被LFS中的更改破坏?
最佳答案
您可以向库中添加一个API来返回sizeof(off_t),然后从客户端检查它。或者,库可以要求每个应用程序提供API,以便成功链接:
图书馆c:
size_t lib_get_off_t_size (void)
{
return (sizeof(off_t));
}
client.c(初始化函数):
if (lib_get_off_t_size() != sizeof(off_t) {
printf("Oh no!\n");
exit();
}
如果库有一个init函数,那么您可以将检查放在那里,但是客户端必须提供API来获得off-t的大小,这通常不是库的工作方式。