1个稳定版本
1.0.0 | 2022年9月19日 |
---|
#3 in #produced
14MB
1.5K SLoC
包含 (ELF库, 5.5MB) aim/libxdrk-x86_64.so, (ELF库, 5.5MB) aim/libmatlabxrk.so.0, (Windows DLL, 2.5MB) aim/libxdrk-x86_64.dll, (静态库, 10KB) aim/libxdrk-x86_64.lib
xdrk
一个用于访问由AiM设备产生的文件的库
或者更确切地说,是一个针对由AiM提供的C/C++编写的共享库的Rust包装器,该库提供了一个不安全接口。这个包装器尽力使接口安全,确实做到了 - 但它仍然存在一个痛点,那就是必须与写缓冲区(或者如你所说,指向头分配数组的指针)打交道。然而,这个包装器也是尽可能地紧密。
总结:安全使用AiM访问XRK/DRK文件的库。
构建和测试
构建遵循标准的Rust风格
cargo build
它在Linux和Windows 64位上都能工作;在Windows上,你需要使用 x86_64-pc-windows-msvc
目标,这又要求你安装几个GB的MSVC构建工具。
测试与构建相同,但 Drop
实现测试必须单独运行,因为,嗯,AiM库执行了一些磁盘文件I/O操作,在并行运行测试时这是不可能发生的
cargo test
cargo test -- --ignored
如果你查看了 coverage.sh
文件,这是持续集成环境运行的文件,你将注意到这里,我们以单线程方式运行测试
cargo test -- --test-threads=1
cargo test -- --ignored
这样做是因为由于 grcov
所需的标志,不知何故,测试是在单独的进程中运行的(我猜?)或类似的东西 - 结果是它会破坏用于将AiM库包装在线程安全方式中所需的全局变量,并且会发生非常奇怪的错误,因此我们无法在CI中并行运行测试。如果你遇到问题,我建议你像CI一样以单线程方式运行测试,看看会发生什么。
在我们的机器上,测试在合理、小于60秒的时间范围内运行。所以如果你使用的是某种相对现代的设备,你不在Windows上,你看到过长的运行时间,那么可能有问题。在Windows上,测试运行时间比Linux长10倍,因为AiM DLL打开任何XRK/DRK文件需要10到20秒,而在Linux上这个过程几乎不需要一秒。
使用它
最好是将其声明为你的项目依赖项,通过git完成。
如果你在Windows上工作,有一些注意事项
MSVC不会将.dll文件链接起来并在之后动态加载它,但也不会“盲目”地链接共享对象并在运行时检查是否一切正常。好吧,某种程度上是这样的,因为它需要“链接”的资源只是一个包含大量混淆的符号名称的文件,然后它们仍然会在运行时再次检查(因为,好吧,实际上没有其他方法)。
就是这样。好消息是,如果您有.dll文件,您实际上可以使用微软自己的工具生成这个混淆符号文件。
要在Windows上链接AiM库,您需要一个与他们提供的.dll文件对应的.lib文件。在aim
目录中包含一个,但如果出于任何原因您需要更新版本,请继续阅读。
您应该已经安装了MSVC构建工具,以与Rust的x86_64-pc-windows-msvc
目标一起工作。现在再次启动您的Visual Studio安装程序并安装C++ CLI工具,或者Windows基础工具,或者Visual Studio版本中称其为这样的东西;如果您不确定,只需在Google上搜索“visual studio dumpbin”或类似组合的术语,然后继续。
现在您已经安装了另外2GB的东西™,请按照以下步骤操作
- 从开始菜单运行“Visual Studio命令提示符”。
- 导航到
where/you/put/xdrk/aim
- 执行命令:
dumpbin /exports libxdrk-x86_64.dll > libxdrk-x86_64.def
此命令以文本形式打印有关给定DLL库的一些信息到其标准输出。我们将其重定向到具有DEF扩展名的文本文件。但是,要使其成为真正的DEF文件,我们需要编辑它。 - 在某个文本编辑器中打开
libxdrk-x86_64.def
并编辑它,使其只包含以下形式的导出函数名称
在此阶段,您还可能想要将DEF文件与此存储库中EXPORTS function_1_name function_2_name function_3_name
aim
目录中提供的DEF文件进行比较。 - 执行另一个命令
lib /def:libxdrk-x86_64.def /out:libxdrk-x86_64.lib /machine:x64
就这样!从DLL库生成的所需LIB文件。
我从互联网上偷了这个指南。像往常一样,感谢,互联网!
依赖关系
~5–7MB
~121K SLoC