书中的FFI示例在Windows下找不到-lanneclib

链接下面的外部C DLL与callback示例错误 。

我已经创build了anneclib.dll,分散它(和lib)甚至尝试完整path,但仍然得到相同的错误(但与完整的path)。

错误1错误:与gcc链接失败:退出代码:1注意:“gcc”“-Wl, – enable-long-section-names”“-fno-use-linker-plugin”“-Wl, – nxcompat” “-static-libgcc”“-m64”“-L”“C:\ Program Files \ Rust stable 1.0 \ bin \ rustlib \ x86_64-pc-windows-gnu \ lib”“-o”“obj \ Debug \ Anne。 exe“”obj \ Debug \ Anne.o“”-Wl, – gc-sections“”C:\ Program Files \ Rust stable 1.0 \ bin \ rustlib \ x86_64-pc-windows-gnu \ lib \ libstd-4e7c5e5c。 rlib“”C:\ Program Files \ Rust stable 1.0 \ bin \ rustlib \ x86_64-pc-windows-gnu \ lib \ libcollections-4e7c5e5c.rlib“”C:\ Program Files \ Rust stable 1.0 \ bin \ rustlib \ x86_64- “C:\ Program Files \ Rust stable 1.0 \ bin \ rustlib \ x86_64-pc-windows-gnu \ lib \ librand-4e7c5e5c.rlib”“C:\ Program Files \ Files \ Rust stable 1.0 \ bin \ rustlib \ x86_64-pc-windows-gnu \ lib \ liballoc-4e7c5e5c.rlib“”C:\ Program Files \ Rust stable 1.0 \ bin \ rustlib \ x86_64-pc-windows-gnu \ lib \ liblibc-4e7c5e5c.rlib“”C:\ Program Files \ Rust stable 1.0 \ bin \ rustlib \ x86_64-pc-windows-gnu \ lib \ libcore-4e7c5e5c.rlib“”-L“”C:\ Program Files \ Rust stable 1.0 \ bin \ rustlib \ x86_64-pc-windows-gnu \ lib“”-L“”C:\ src \ ann \ anne.rust \ anne.rust \ Anne.rust \ bin \ x86_64-pc- windows-gnu“”-L“”C:\ src \ ann \ anne.rust \ anne.rust \ Anne \ bin \ x86_64-pc-windows-gnu“”-Wl, – whole-archive“”-Wl, -Bstatic“”-Wl, – no-whole-archive“”-Wl,-Bdynamic“”-lanneclib“”-lws2_32“”-luserenv“”-lcompiler-rt“注意:ld:找不到-lanneclib

使用Visual Studio Rust项目。

我应该把它放在哪里?

 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 } } 

Solutions Collecting From Web of "书中的FFI示例在Windows下找不到-lanneclib"

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

这是一个适用于我的小例子:

带有hello功能的AC文件:

 #include <stdio.h> void hello() { printf("Hello from C!\n"); } 

使用MinGW将C文件编译到共享库libhello.c:

 gcc -shared -o libhello.dll hello.c 

Rust文件main.rs:

 #[link(name = "hello")] extern { fn hello(); } fn main() { unsafe { hello(); } } 

现在,您必须将(libhello.dll的副本)放入子文件夹\ bin \ x86_64-pc-windows-gnu中:

 + bin + --- x86_64-pc-windows-gnu + --- libhello.dll + main.rs 

你应该可以通过编译它

 rustc main.rs 

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