我有一个使用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
答案 0 :(得分:2)
好吧,它构建了一个Rust库,它想要与freetype链接但是你的系统上没有这样的库。由于您使用的是Mac OS X,因此并不是意料之外的。 Freetype是Linux世界的原生,而不是macs。
您需要安装freetype,例如,使用brew:
brew install freetype
它会将库安装到/usr/local/lib
。
如果您确实使用brew,它会自动为您的系统添加相应的pkg-config配置,因为freetype-sys
(freetype-rs
的依赖关系)使用pkg-config来发现库,所有内容将自动开始工作。
如果你没有使用brew,很可能你不会得到pkg-config配置,并且没有必要的标志会自动添加到构建中。坦率地说,我不知道如何克服这个问题而不改变freetype-sys
构建以显式添加/usr/local/lib
(或者安装库的任何路径)。您可以在程序中添加build script,它将freetype的路径附加到构建选项,但它不会影响依赖项的编译。它可能有效也可能无效。