使用freetype-rs时为什么会报告链接错误?

时间:2015-07-06 15:19:30

标签: rust freetype

我有一个使用freetype-rs的基本项目,但是当我运行cargo run时它会报告链接错误。我的系统是OS X Yosemite 10.10.2。

目录列表

./Cargo.toml
./src/main.rs

Cargo.toml

[package]

name = "usefree"
version = "0.0.1"
authors = ["zhch <zhch@gmail.com>"]

[dependencies]
freetype-rs = "0.1.0"

的src / main.rs

#[macro_use]
extern crate freetype;

fn main() {
    println!("Hello,World!");
}

来自cargo run

的错误
Compiling usefree v0.0.1 (file:///Users/zhangcheng/temp/d3/san)
error: linking with `cc` failed: exit code: 1
note: "cc" "-m64" "-L" "/Users/zhangcheng/.multirust/toolchains/nightly/lib/rustlib/x86_64-apple-darwin/lib" "/Users/zhangcheng/temp/d3/san/target/debug/usefree.o" "-o" "/Users/zhangcheng/temp/d3/san/target/debug/usefree" "-Wl,-force_load,/Users/zhangcheng/.multirust/toolchains/nightly/lib/rustlib/x86_64-apple-darwin/lib/libmorestack.a" "-Wl,-dead_strip" "-nodefaultlibs" "/Users/zhangcheng/temp/d3/san/target/debug/deps/libfreetype-4323fafa5d970f54.rlib" "/Users/zhangcheng/temp/d3/san/target/debug/deps/libfreetype_sys-a42cc5659b21e38e.rlib" "/Users/zhangcheng/temp/d3/san/target/debug/deps/liblibc-ef5cbad4ef5c7a1e.rlib" "/Users/zhangcheng/temp/d3/san/target/debug/deps/libbitflags-dd68b8369bcd8ff0.rlib" "/Users/zhangcheng/.multirust/toolchains/nightly/lib/rustlib/x86_64-apple-darwin/lib/libstd-74fa456f.rlib" "/Users/zhangcheng/.multirust/toolchains/nightly/lib/rustlib/x86_64-apple-darwin/lib/libcollections-74fa456f.rlib" "/Users/zhangcheng/.multirust/toolchains/nightly/lib/rustlib/x86_64-apple-darwin/lib/librustc_unicode-74fa456f.rlib" "/Users/zhangcheng/.multirust/toolchains/nightly/lib/rustlib/x86_64-apple-darwin/lib/librand-74fa456f.rlib" "/Users/zhangcheng/.multirust/toolchains/nightly/lib/rustlib/x86_64-apple-darwin/lib/liballoc-74fa456f.rlib" "/Users/zhangcheng/.multirust/toolchains/nightly/lib/rustlib/x86_64-apple-darwin/lib/liblibc-74fa456f.rlib" "/Users/zhangcheng/.multirust/toolchains/nightly/lib/rustlib/x86_64-apple-darwin/lib/libcore-74fa456f.rlib" "-L" "/Users/zhangcheng/temp/d3/san/target/debug" "-L" "/Users/zhangcheng/temp/d3/san/target/debug/deps" "-L" "/Users/zhangcheng/.multirust/toolchains/nightly/lib/rustlib/x86_64-apple-darwin/lib" "-L" "/Users/zhangcheng/temp/d3/san/.rust/lib/x86_64-apple-darwin" "-L" "/Users/zhangcheng/temp/d3/san/lib/x86_64-apple-darwin" "-l" "freetype" "-l" "c" "-l" "m" "-l" "System" "-l" "pthread" "-l" "c" "-l" "m" "-Wl,-rpath,@loader_path/../../../../../.multirust/toolchains/nightly/lib/rustlib/x86_64-apple-darwin/lib" "-Wl,-rpath,/usr/local/lib/rustlib/x86_64-apple-darwin/lib" "-l" "compiler-rt"
note: ld: warning: directory not found for option '-L/Users/zhangcheng/temp/d3/san/.rust/lib/x86_64-apple-darwin'
ld: warning: directory not found for option '-L/Users/zhangcheng/temp/d3/san/lib/x86_64-apple-darwin'
ld: library not found for -lfreetype
clang: error: linker command failed with exit code 1 (use -v to see invocation)

error: aborting due to previous error
Could not compile `usefree`.

brew install freetype之后,rust会编译freetype但错误仍然存​​在。

    Updating registry `https://github.com/rust-lang/crates.io-index`
   Compiling libc v0.1.8
   Compiling bitflags v0.1.1
   Compiling pkg-config v0.3.5
   Compiling libz-sys v0.1.6
   Compiling freetype-sys v0.1.2
   Compiling freetype-rs v0.1.0
   Compiling usefree v0.0.1 (file:///Users/zhangcheng/temp/d3/san)
error: linking with `cc` failed: exit code: 1

1 个答案:

答案 0 :(得分:2)

好吧,它构建了一个Rust库,它想要与freetype链接但是你的系统上没有这样的库。由于您使用的是Mac OS X,因此并不是意料之外的。 Freetype是Linux世界的原生,而不是macs。

您需要安装freetype,例如,使用brew:

brew install freetype

它会将库安装到/usr/local/lib

如果您确实使用brew,它会自动为您的系统添加相应的pkg-config配置,因为freetype-sysfreetype-rs的依赖关系)使用pkg-config来发现库,所有内容将自动开始工作。

如果你没有使用brew,很可能你不会得到pkg-config配置,并且没有必要的标志会自动添加到构建中。坦率地说,我不知道如何克服这个问题而不改变freetype-sys构建以显式添加/usr/local/lib(或者安装库的任何路径)。您可以在程序中添加build script,它将freetype的路径附加到构建选项,但它不会影响依赖项的编译。它可能有效也可能无效。