Rust 链接自定义动态库时出错

Rust 链接自定义动态库时出错,rust,dynamic-linking,rust-cargo,Rust,Dynamic Linking,Rust Cargo,在一个目录中,我有一个C文件和它的头 /主页/测试/c_pro f.c f.h libf.so 我使用以下命令将f.c编译成一个名为libf.so的dll gcc -c -fPIC f.c -o f.o gcc f.o -shared -o f.so 我想在我的生锈项目中使用它 所以在Rust项目中,我有一个build.rs println!("cargo:rustc-link-search=/home/test/c_pro"); println!("cargo:rustc-li

在一个目录中,我有一个C文件和它的头

/主页/测试/c_pro

  f.c
  f.h
  libf.so

我使用以下命令将f.c编译成一个名为libf.so的dll

gcc -c -fPIC f.c -o f.o
gcc f.o -shared -o f.so
我想在我的生锈项目中使用它

所以在Rust项目中,我有一个build.rs

println!("cargo:rustc-link-search=/home/test/c_pro");
println!("cargo:rustc-link-lib=dylib=f")
当我运行
货物构建时
构建失败,出现以下错误

/home/test/c_pro/f.so: undefined reference to `EC_KEY_new_by_curve_name'
      collect2: error: ld returned 1 exit status
在我的f.c中,我从openssl进行了一些导入

#include <openssl/bio.h>
#include <openssl/bn.h>
#include <openssl/ecdsa.h>
#include <openssl/obj_mac.h>

有什么想法吗?

gcc -c -fPIC f.c -o f.o
gcc f.o -shared -o f.so -lssl

“我已经将f.c编译成一个名为libf.so的dll”-你是怎么做到的?您的共享对象是否正确报告其对OpenSSL的依赖关系?你是用
-lssl
构建它的吗?换句话说:你能试着用C编写一个使用
libf的短程序吗?我打赌这个问题与生锈无关,而是关于如何构建工作共享对象。@UliSchlachter,我已经更新了注释。看起来您需要添加
-lssl
?请查看更新的注释。编译确实发生了,但是libf.so在ldd输出中是空的。不用麻烦了,明白了。我只需要设置
LD\u LIBRARY\u PATH
env变量。
gcc -c -fPIC f.c -o f.o
gcc f.o -shared -o f.so -lssl