我正在尝试将 Isis2 库的新版本从 Windows 上的 .NET 移植到 Mono/Linux。这个新代码使用 MemoryMappedFile 对象,我突然遇到了 Mono.Posix.Helper 库的问题。我相信如果我能够成功编译并运行以下测试程序,我的问题就会消失:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO.MemoryMappedFiles;
namespace foobar
{
class Program
{
static int CAPACITY = 100000;
static void Main(string[] args)
{
MemoryMappedFile mmf = MemoryMappedFile.CreateNew("test", CAPACITY);
MemoryMappedViewAccessor mva = mmf.CreateViewAccessor();
for (int n = 0; n < CAPACITY; n++)
{
byte b = (byte)(n & 0xFF);
mva.Write<byte>(n, ref b);
}
}
}
}
...目前,当我尝试在 Mono 上编译它时,我得到了一组令人眼花缭乱的链接器错误:它似乎无法找到 libMonoPosixHelper.so,尽管我的 LD_LIBRARY_PATH 包含包含该文件的目录,然后如果我设法通过那个阶段,我得到“System.NotImplementedException:请求的功能没有实现。” 在运行时。然而,我已经查看了 CreateNew 方法的 Mono 实现;它似乎完全实现了,CreateViewAccessor 方法也是如此。因此,我感觉在链接到 Mono 库时出现了严重错误。
有人对 Mono 下的 MemoryMappedFile 对象有经验吗?我在这里和其他网站上看到很多关于此类问题的问题,但似乎都是旧线程......