libgcc 和 Rust 系统库中"__udivti3"的多重定义



我正在尝试将一些可执行文件(使用 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'的多重定义错误(对我没有帮助。

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

显然,我假设使用cdylib不适合您,并且您的 Rust 库需要是静态的。

最新更新