- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 SAW 验证一些 Rust 代码. SAW 要求您编译为 LLVM bitcode ,然后您可以导入并验证。我知道您可以使用 --emit=llvm-bc
生成位码标记为 rustc,这对于没有依赖项的项目非常有用。
尝试编译使用外部 crate 的项目时会出现问题。这是 Cargo.toml 文件的示例:
[package]
name = "foobar"
version = "0.1.0"
edition = "2018"
[dependencies]
pythagoras = "0.1.1"
这是一个基本的
src/lib.rs
我们可能想要编译和验证:
pub use pythagoras;
#[no_mangle]
pub extern "C" fn calc_hypot(a: u32, b: u32) -> f64 {
pythagoras::theorem(a, b)
}
我们可以把它编译成这样的位码:
RUSTFLAGS="--emit=llvm-bc" cargo build --release
.问题是当前模块的位码及其依赖项是单独生成的(在
target/release/deps/foobar-something.bc
和
target/release/deps/pythagoras-somethingelse.bc
中)。它们仅在生成实际编译库时组合。
最佳答案
扩展在 Aiden4评论:
rm -r target/
RUSTFLAGS="--emit=llvm-bc" cargo build --release
编译它llvm-link target/release/deps/*.bc > withdeps.bc
链接在一起core
或
std
虽然(虽然你可以通过不稳定的
#![no_core]
避免这种情况,但祝你好运,实际上可以通过这种方式编译),所以你可能也想获得比特码。
cargo
has experimental support for building the standard libraries from source ,所以只需追加
-Z build-std --target x86_64-unknown-linux-gnu
(并在需要时更新目标)到您的
cargo
构建命令。使用时
--target
,这是
-Z build-std
所要求的,构建文件放在特定于目标的目录中,
target/x86_64-unknown-linux-gnu/release/deps/
在这种情况下。 targetless 目录包含标准库的构建依赖项:我们不想要那个!
std
及其依赖项:
proc_macro
这里不需要,因为我们正在编译为二进制文件,而不是 proc 宏。我们还需要链接到
proc_abort
或
panic_unwind
,将其与我们选择的展开代码生成设置相匹配。默认是展开,所以让我们删除另一个,
proc_abort
.让我们将这些库发送到砧板:
rm target/x86_64-unknown-linux-gnu/release/deps/{panic_abort,proc_macro}-*.bc
.
rm -r target/
RUSTFLAGS="--emit=llvm-bc" cargo build --release -Z build-std --target x86_64-unknown-linux-gnu
rm target/x86_64-unknown-linux-gnu/release/deps/{panic_abort,proc_macro}-*.bc
llvm-link target/x86_64-unknown-linux-gnu/release/deps/*.bc > withalldeps.bc
是的,它奏效了!好吧,除了对那里的未定义函数的调用仍然设法通过。
__rust_alloc
,
__rust_dealloc
,
__rust_realloc
, 和
__rust_alloc_zeroed
是使用 Rust 的 LLVM 分支定义的魔法函数。标准库还依赖于
libpthread
和
dlsym
它们是通常用 C 实现的语言无关库/函数。您可以使用
clang
和一个
libc
支持使用 Clang 编译的实现(GNU libc 不支持,我认为 musl 可能在这里工作?)以在需要时获得它。此外,如果您正在编译为可执行文件,则很难找到
main
来自
_start
.
关于Rust:在 LLVM Bitcode 中包含依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69042049/
我尝试在连接手机的情况下构建 ios 或 flutter build ios 我收到此错误 ld: '/Users/Library/Developer/Xcode/DerivedData/Runner
我已阅读 this thread在 llvm-dev 上遇到同样的问题:我无法将 llvm-ar archieve 库与其他 bitcode 文件链接到另一个 bitcode 文件 在 llvm-li
我有一个由其他公司构建的静态库。我想知道它是否是包含bitcode的静态库,哪个命令可以在终端中检测到它? 最佳答案 正如其他答案中已经写的那样, otool -l yourlib.a | grep
问题在标题中简单说明。这是我的设置: 构建一个动态框架,可选择链接(弱链接)到 GoogleInteractiveMediaAds.framework。对于使用我的框架的应用程序,GoogleInte
在寻找确定 iOS 二进制文件是否是使用 Bitcode 构建的方法时,我发现了以下帖子: How to check if a framework is BITCODE supported for X
在最新的 1.0.6 版本中,它说是,但不是: $ otool -l linkedin-sdk | grep '__bitcode' 不产生任何输出。 最佳答案 在 LinkedIn 更新他们的 SD
我有 lib.o 错误 我找到了很多这个问题的答案。我在其他链接器标志中添加了 -fembed-bitcode 并在其他 c 标志中添加了 -fembed-bitcode 在项目中我也添加了-femb
我正在尝试将我客户的一个应用程序的新版本提交到 itunes connect,但我收到了这个奇怪的错误 -fembed-bitcode is not supported on versions of
我的应用程序很大,用 Unity3D 制作的普通麻将游戏几乎有 100MB。我想为我的听众提供较小的下载量。 大部分问题来自嵌入在胖二进制文件中的可执行代码(armv7 和arm64 架构)。我不使用
我正在尝试将 watchOS3 应用程序上传到苹果商店,但是我收到了类似下面的拒绝(来自苹果) 无效的可执行文件 - 可执行文件“someWatch Extension”不包含位码。更正这些问题后,您
我最近下载了 Xcode 7 beta,Xcode 提示我的一些 C 库没有被编译成 BitCode。我将如何告诉 Clang 生成与 iOS 兼容的 BitCode?我在 stackoverflow
我正在尝试在启用 Bitcode 的情况下重建 WebRTC iOS 框架,但它不起作用,它给了我错误。错误信息是 clang++: error: unknown argument: '-ffile-
我正在使用 SAW 验证一些 Rust 代码. SAW 要求您编译为 LLVM bitcode ,然后您可以导入并验证。我知道您可以使用 --emit=llvm-bc 生成位码标记为 rustc,这对
iOS 9 通过三种方式引入了 App Thinning: 应用切片 按需资源 Bit Code:iOS App 的一种插件 我可以看到 1. 和 2. 的教程和示例代码,但找不到 Bitcode 的
我尝试将几个适用于 iOS 的开源库编译为带有 bitcode 的共享库。我已将标志 -fembed-bitcode 添加到 CFLAGS 和 LDFLAGS 中。编译正常完成,但一些生成的库(例如
到目前为止,我在使用 CocoaPods 时从未遇到过任何问题(我用它几次将 Parse 集成到我的 iOS 应用程序中)。但是这次我对下面的消息感到困惑。 当我以前使用 CocoaPods 时,项目
我真的很想为我的 iOS 项目添加 Bitcode 支持,但我使用的是 Google Sign In 框架,看起来他们仍然没有向库中添加 Bitcode 支持。 我似乎找不到任何关于这是否即将推出的信
从Xcode 7开始成为第三方框架应该支持的通病之一Bitcode .我们还可以通过在build设置中将 ENABLE_BITCODE 设置为 NO 来禁用 BITCODE。但我不想关闭它,而是想将我
这在 Apple 开发中经常出现——当使用 bitcode 提交到应用商店时,你当然必须包含完整的 bitcode (-fembed-bitcode)。但是有这种中间“标记”模式的原因是什么,它包括部
我正在从源代码为 iOS 构建一个动态框架,启用位码(使用 cmake 和 xcodebuild)。我用 lipo和 install_name_tool制作一个胖二进制文件并更新 LC_ID_DYLI
我是一名优秀的程序员,十分优秀!