【发布时间】:2015-08-13 06:53:14
【问题描述】:
external c dll with call back example 之后的链接出错。
我创建了 anneclib.dll 并将其分散(和 lib),甚至尝试了完整路径,但仍然得到相同的错误(但使用完整路径)。
错误 1 错误:与
gcc链接失败:退出代码:1 注意:“gcc” “-Wl,--enable-long-section-names” “-fno-use-linker-plugin” "-Wl,--nxcompat" "-static-libgcc" "-m64" "-L" "C:\Program Files\Rust 稳定的 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-pc-windows-gnu\lib\libunicode-4e7c5e5c.rlib" "C:\Program Files\Rust stable 1.0\bin\rustlib\x86_64-pc-windows-gnu\lib\librand-4e7c5e5c.rlib" "C:\Program 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
}
}
【问题讨论】:
-
可能是 stackoverflow.com/q/28183497/155423 的副本?特别是
my_proj\bin\x86_64-pc-windows-gnu或my_proj\bin\i686-pc-windows-gnu。 -
不,因为它在没有链接的情况下编译和运行