问题描述
我正在尝试使用 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 库中加载了其他函数,因此我的动态加载技术工作正常。
我有两个理论:
- stat 是 xstat 的宏,因此 stat 不再存在。
- 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)的代价。