【发布时间】:2017-05-17 22:49:36
【问题描述】:
出于教育目的,我正在为 ARM 编写嵌入式 Rust 程序。
由于它是一个裸机系统,我只使用核心库。该库的手册页声称 corelib 不依赖于任何东西,但 memcpy、memcmp 和 memset 以及 unwind 函数(参见 https://doc.rust-lang.org/core/index.html)。
但是,特别是如果我使用 atomic types,由于缺少符号(例如 __sync_val_compare_and_swap_4 或 __sync_lock_test_and_set_4 表示缺少 compiler-rt 库),我会继续收到链接器错误。我理解,compiler-rt 应该在 corelib 之上。这看起来像一个循环依赖,不应该是。另外,我知道 compiler-rt 又依赖于操作系统。
- 我的哪一部分理解不正确?
- 我怎样才能得到一个真正独立的corelib,或者它的哪些部分是真正独立的?我知道我可以重新实现缺少的功能,但它们似乎很多。另外,我知道compiler-builtins crate,但它仍然给我留下了未解决的符号。
【问题讨论】:
-
__sync_val_compare_and_swap_4不是由 compiler-rt 提供的。链接到libgcc_s有效吗? (参考stackoverflow.com/a/9329139/224671) -
@kennytm:还没有,我不确定我是否有它用于目标平台,但我会试一试。但是,llvm 需要 libgcc_s 有点奇怪。
-
链接的问题使用 GCC 4,我不知道 LLVM 等价物是什么 :)