在 libc.so.6

问题描述

我正在尝试使用 Dart FFI 动态加载 linux/posix 'stat' 函数

我假设该函数在 libc.so.6 库中,但是当我尝试加载它时出现错误

Invalid argument(s): Failed to lookup symbol (/lib/x86_64-linux-gnu/libc.so.6: undefined symbol: stat)

我成功地从 libc.so.6 库中加载了其他函数,因此我的动态加载技术工作正常。

我有两个理论:

  1. stat 是 xstat 的宏,因此 stat 不再存在。
  2. stat 位于另一个我无法找到的库中。

理想情况下,我想使用 stat 而不是 xstat,因为我需要这段代码也能在 osx 上工作,据我所知,它不支持 xstat。 帮助?

解决方法

我有两个理论:

无需理论化:你可以看看:

echo "#include <sys/stat.h>" | gcc -xc - -E -dD | less
nm -AD /lib/x86_64-linux/gnu/*.so* | grep ' stat$'

会告诉你你需要知道的一切(你的第一个理论是正确的)。

我想使用 stat 而不是 xstat

你不能:它不存在(使用 GLIBC 时)。

我需要这段代码也能在 osx 上运行,据我所知它不支持 xstat。

您的代码可以检测到它正在运行的平台并进行调整。这是使用非便携式机制(例如 FFI)的代价。