我有一份现有的面向诺德克nRF52832 BLE微控制器的C语言固件。我想将自己用Rust编写的一些新代码链接到该固件上。
然而,当我尝试进行链接时,连接器会抱怨说我有两个不同定义的堆栈:
/nix/store/m7gf0nzixwgqk21an0fxc047qa0mvbng-gcc-arm-embedded-7-2018-q2-update/bin/../lib/gcc/arm-none-eabi/7.3.1/../../../../arm-none-eabi/bin/ld: .stack_dummy has both ordered [`.stack_sizes' in /home/matthias/source/tbconnect/modem/target/thumbv7em-none-eabihf/release/libtbmodem.a(alloc-314aba8dbd2706e9.alloc.deuukmti-cgu.0.rcgu.o)] and unordered [`.stack' in .sdk/modules/nrfx/mdk/gcc_startup_nrf52.o] sections
我想这里重要的部分在于链接器告诉我,SDK Nordic为BLE微控制器提供了.stack_dummy
,而Rust库提供了自己的栈定义。
实际上,我期望编译为库的代码不提供栈定义。如果所有库都定义栈,我将如何将它们链接到项目中呢?我的假设完全错误吗?
因此,我在想是否完全错误地定义了Rust库。
Cargo.toml:
[package]
name = "tbmodem"
version = "0.1.0"
edition = "2018"
publish = false
[lib]
crate-type = ["staticlib"]
[profile.dev]
panic = "abort"
[profile.release]
panic = "abort"
[dev-dependencies]
timebomb = "0.1.2"
代码随后使用cargo build --release --target thumbv7em-none-eabihf
进行编译。