小编Dav*_*van的帖子

rust-bindgen 未定义符号,但可以使用 cc 编译

我正在尝试使用 rust-bindgen 来调用 glfw 和 OpenGL 函数。bindgen 正确生成了绑定,但是,当我实际构建项目时,它给了我未定义的符号错误(顺便说一句,我运行的是 macOS 10.15.3)。

\n

这似乎意味着我没有告诉 rustc 链接 glfw dylib。然而,当我编写自己的 c 程序在内部调用 glfw 并使用 cc 板条箱链接它时,没有问题,并且所有内容都链接,尽管链接库的行是相同的。

\n

使用bindgen的项目代码

\n

文件结构:

\n
.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Cargo.lock\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Cargo.toml\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 build.rs\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 src\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 lib.rs\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 main.rs\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 wrapper.h\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 target\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 debug\n     \xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 build\n     \xc2\xa0\xc2\xa0  \xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 bindgen-opengl-10578485537ed6e1\n     \xc2\xa0\xc2\xa0  \xc2\xa0\xc2\xa0  \xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 out\n     \xc2\xa0\xc2\xa0  \xc2\xa0\xc2\xa0  \xc2\xa0\xc2\xa0  \xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 bindings.rs\n\n
Run Code Online (Sandbox Code Playgroud)\n

包装器.h:

\n
.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Cargo.lock\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Cargo.toml\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 build.rs\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 src\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 lib.rs\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 main.rs\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 wrapper.h\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 target\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 debug\n     \xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 build\n     \xc2\xa0\xc2\xa0 …
Run Code Online (Sandbox Code Playgroud)

c linker rust rust-cargo rust-bindgen

6
推荐指数
0
解决办法
1600
查看次数

无法使用 cairo-rs 链接程序:“与 `cc` 链接失败”和“未找到 -lgobject-2.0 的库”

我正在按照本教程使用 cairo-rs 为图像绘制一些内容。当我运行我的代码时,我得到一个很长的错误。重要的部分似乎是:

linking with "cc" failed: exit code: 1
Run Code Online (Sandbox Code Playgroud)

ld: library not found for -lgobject-2.0 
clang: error: linker command failed with exit code 1
Run Code Online (Sandbox Code Playgroud)

我通过 MacPorts 安装了 Cairo,所以这应该不是问题。我从教程中复制了 Cargo.toml 文件,除了最新的包:

[dependencies]
png = "0.12.0"
cairo-rs = {version = "0.4.1", features = ["png"]}
Run Code Online (Sandbox Code Playgroud)

我也尝试了教程中列出的版本,但我得到了同样的错误。

Rust 问题 18610似乎有类似的错误,并建议安装libc-dev. 我不知道那是什么或为什么它会解决任何问题。

我在某处看到它可能是命名冲突,所以我更改了我的项目名称以免冲突,但它没有帮助。

细节

  • 我在稳定的 Rust 上,我什至重新安装了它。
  • MacOS High Sierra,版本 10.13.3 (17D47)

完全错误

[dependencies]
png = "0.12.0"
cairo-rs = {version = "0.4.1", features = ["png"]}
Run Code Online (Sandbox Code Playgroud)

Cargo.toml

[package]
name …
Run Code Online (Sandbox Code Playgroud)

rust rust-cargo

2
推荐指数
1
解决办法
2016
查看次数

我是否必须使用 usize 来访问向量的元素?

我有一个 2D 向量,它拒绝使用i32值进行索引,但如果我使用as usize以下方法转换这些值,则可以工作:

#[derive(Clone)]
struct Color;

struct Pixel {
    color: Color,
}

fn shooting_star(p: &mut Vec<Vec<Pixel>>, x: i32, y: i32, w: i32, h: i32, c: Color) {
    for i in x..=w {
        for j in y..=h {
            p[i][j].color = c.clone();
        }
    }
}

fn main() {}
Run Code Online (Sandbox Code Playgroud)

当我编译时,我收到错误消息

#[derive(Clone)]
struct Color;

struct Pixel {
    color: Color,
}

fn shooting_star(p: &mut Vec<Vec<Pixel>>, x: i32, y: i32, w: i32, h: i32, c: Color) {
    for i in x..=w …
Run Code Online (Sandbox Code Playgroud)

rust

2
推荐指数
1
解决办法
2045
查看次数

标签 统计

rust ×3

rust-cargo ×2

c ×1

linker ×1

rust-bindgen ×1