1

我正在尝试将一些可执行文件(使用 gcc 编译)与使用cargo build.

cargo 从用 Rust 语言编写的代码生成 .a 和 .so 库。

联动错误为:

/sharedhome/maxaxe01/mbed-cloud-client-example-internal/mbed-cloud-client/parsec-se-driver/target/debug/libparsec_tpm_direct_se_driver.a(compiler_builtins-2541f1e09df1c67d.compiler_builtins.dh9snxly-cgu.0.rcgu.o): In function `__udivti3':
/cargo/registry/src/github.com-1ecc6299db9ec823/compiler_builtins-0.1.25/src/int/udiv.rs:247: multiple definition of `__udivti3'
/usr/lib/gcc/x86_64-linux-gnu/7/libgcc.a(_udivdi3.o):(.text+0x0): first defined here
collect2: error: ld returned 1 exit status

据我了解,一些低级处理器数学函数在我的 libgcc 和 RUST 系统库 compiler_builtins-0.1.25/src/int/udiv.rs 中定义了两次的问题可能有人知道如何解决这个问题?

如果我将可执行文件与库作为共享对象链接,则链接成功,但我需要使用静态库进行编译!(货物构建同时生成.so和.a)

该线程(将 Rust staticlib 与嵌入式 C 程序链接时出现“`memcmp 的多重定义”错误)对我没有帮助。

4

1 回答 1

1

如果函数的两个版本__udivti3是等效的,您可以尝试将您的程序与-Wl,--allow-multiple-definition. 这显然是一个丑陋的黑客,我有兴趣获得一个合适的解决方案,但它对我有用。我在crate (标准库的一部分)和静态版本的 LLVM__muloti4之间遇到了类似的冲突。compiler-builtinslibc++

显然,我假设使用 acdylib不是您的选择,并且您的 Rust 库需要是静态的。

于 2020-10-23T12:57:00.903 回答