似乎GLIBC 2.28(于2018年8月发布)对fcntl进行了相当激进的更改。定义已更改
为不再是外部函数,而是#define
更改为fcntl64。
其结果是,如果你的系统上使用此glibc的编译代码-如果它使用的fcntl()在所有从2018年八月前--the生成的二进制文件将不能在系统上执行这会影响到相当多的各种应用.. .fcntl()的手册页显示,这是一小部分子功能的入口:
https://linux.die.net/man/2/fcntl
如果您可以告诉链接器所需的GLIBC函数的特定版本,那就太好了。但是我发现最接近的是在另一篇文章的答案中描述的这个技巧:
回答“在.so文件中链接到较旧的符号版本”
这有点复杂。 fcntl
是不vffcntl
带va_list的可变参数。在这种情况下,您无法转发可变参数函数的调用。:-(
当一个程序具有稳定的代码且具有较低的依赖关系时,就很难在当前的Ubuntu上构建它了……然后让可执行文件拒绝在仅一年前(近日)发布的另一个Ubuntu上运行。一个人有什么追索权?