当前位置: 首页 > 知识库问答 >
问题:

在Windows下找不到book中的FFI示例-LanneClib

殷宇
2023-03-14

链接到带有回调示例的外部c dll之后时出错。

我创建了Anneclib.dll并分散了它(和lib),甚至尝试了完整路径,但仍然得到相同的错误(但使用完整路径)。

extern fn callback(a: i32) {
    println!("I'm called from C with value {0}", a);
}

#[link(name = "anneclib")]
extern {
   fn register_callback(cb: extern fn(i32)) -> i32;
   fn trigger_callback();
}

fn main() {
    unsafe {
        register_callback(callback);
        trigger_callback(); // Triggers the callback
    }
}

共有1个答案

孙斌
2023-03-14

在错误消息中,您可以看到文件夹[your source folder]\bin\x86_64-pc-windows-gnu被添加到库路径中。你得把你的库放进这个文件夹里。您可能还必须在库名称中添加一个'lib'前缀。

这里有一个对我有用的小例子:

一个带有hello函数的C文件:

#include <stdio.h>

void hello() {
    printf("Hello from C!\n");
}
gcc -shared -o libhello.dll hello.c
#[link(name = "hello")]
extern {
    fn hello();
}

fn main() {
    unsafe { hello(); }
}
+ bin
+ --- x86_64-pc-windows-gnu
      + --- libhello.dll
+ main.rs
rustc main.rs

注为了执行main.exe,还需要main.exe旁边或系统路径中的libhello.dll的副本。

 类似资料:
  • 我正试图开始使用Rust FFI,所以我去了FFI上的nomicon留档,尝试复制“外国呼叫约定”示例。 我编写了一段简单的代码,只需复制粘贴示例,并尝试使用声明的函数: 这真的没有什么用处,我只是想看看我是否可以链接并调用一个函数,而不会让一切都爆炸。 我从编译器中得到这个错误: 这个例子过时了吗?我是不是漏掉了什么明显的东西?看起来不管怎样,我声明的应该在范围内。 我知道winapi板条箱,但

  • 我试图在我的Windows开发机器上安装node-ffi,但是安装失败。根据node-ffi网页,应该支持Windows。然而,看起来gyp试图通过sh执行一些东西,这(显然)在我的系统中不存在。有什么想法吗? 我的系统是Windows7x64。

  • 我已经将JMeter简单数据写入程序配置为输出结果。然而,当使用JMeter HMTL报告的生成器时,我收到了以下错误: 生成报告发生错误:处理示例时出错:消费者失败,消息为:消费者失败,消息为:消费者失败,消息为:消费者失败,消息为:消费者失败,消息为:无列 任何帮助都将不胜感激。

  • 我收到这个错误消息 mylib。dll是一个JNI包装器,它使用其他C库。 当我打开mylib时。dll带有依赖项遍历器它显示所有依赖库都可用! 有没有办法检查java中找不到哪个库? 我用Visual Studio编译了第三方库,用mingw32编译了mylib。这可能是个问题吗?

  • 问题内容: 我收到以下错误: 我的代码是: Windows 7,64位。Python 3.x最新,稳定。 有任何想法吗? 谢谢, 问题答案: 当命令是内置的shell时,请在调用中添加“ shell = True”。 例如,您将输入: 引用文档: 在Windows上唯一需要指定shell = True的时间是将要执行的命令内置到shell中(例如dir或copy)。您不需要shell = True

  • 问题内容: 我按照本教程安装了量角器,当我使用webdriver-manager更新时,它说: 您在我尝试进行量角器测试时说: 我检查了 local.dp.js ,发现它试图从 .. \ node_modules \ protractor \ selenium \ chromedriver加载chromedriver, 但是只有一个空的zip文件 chromedriver_2.9 。 因此,我手动