HED*_*HED 6 gcc static-linking rust
我尝试创建一个可由 ac 程序调用的 Rust 库,到目前为止,我设法创建一个动态库并调用它(使用 创建的库rustc --crate-type=cdylib src/lib.rs -o libCustomlib.so,使用 链接gcc main.o -lCustomlib)。
当我现在采用相同的代码但将其编译为静态库(rustc --crate-type=staticlib src/lib.rs -o libCustomlib.a)时,gcc 在链接(使用gcc main.o -L. -l:libCustomlib.a)时抛出错误
错误都是对各种函数的未定义引用
前几行:
/usr/bin/ld: ./libCustomlib.a(std-b1b61f01951b016b.std.5rqysbiy-cgu.2.rcgu.o): in function `std::sys::unix::mutex::Mutex::init':
/usr/src/rustc-1.43.0//src/libstd/sys/unix/mutex.rs:46: undefined reference to `pthread_mutexattr_init'
/usr/bin/ld: /usr/src/rustc-1.43.0//src/libstd/sys/unix/mutex.rs:48: undefined reference to `pthread_mutexattr_settype'
/usr/bin/ld: /usr/src/rustc-1.43.0//src/libstd/sys/unix/mutex.rs:52: undefined reference to `pthread_mutexattr_destroy'
Run Code Online (Sandbox Code Playgroud)
完整错误超过 100 行长,但这些行都是这种形式
lib.rs 目前只有一个测试 helloWorld 函数:
/usr/bin/ld: ./libCustomlib.a(std-b1b61f01951b016b.std.5rqysbiy-cgu.2.rcgu.o): in function `std::sys::unix::mutex::Mutex::init':
/usr/src/rustc-1.43.0//src/libstd/sys/unix/mutex.rs:46: undefined reference to `pthread_mutexattr_init'
/usr/bin/ld: /usr/src/rustc-1.43.0//src/libstd/sys/unix/mutex.rs:48: undefined reference to `pthread_mutexattr_settype'
/usr/bin/ld: /usr/src/rustc-1.43.0//src/libstd/sys/unix/mutex.rs:52: undefined reference to `pthread_mutexattr_destroy'
Run Code Online (Sandbox Code Playgroud)
调用者部分中包含的头文件是:
extern void fn_test();
Run Code Online (Sandbox Code Playgroud)
问题是,我在创建静态库或链接它时出错了吗?或者问题出在其他地方并且它不应该与静态库一起使用?我应该只使用动态方法(我想避免这种方法,因为静态方法感觉更像是在一个 exe 中使用多种语言,因为您不必分发库)?
(免责声明:对于每个人问为什么我会在没有充分理由的情况下做类似的事情:这是一个有趣的项目,整个程序应该尽可能复杂,这就是我想使用不同语言的原因)
在 Linux 上,std动态链接到 pthreads 和 libdl。您还需要链接这些来创建可执行文件:
gcc main.o libCustomlib.a -lpthread -ldl
Run Code Online (Sandbox Code Playgroud)
结果是一个二进制文件,动态链接到一些基本库,但静态链接到 Customlib。
如果您想要一个纯粹静态链接的二进制文件,您可能只需要使用和启用不依赖于动态链接系统库no_std的特定功能。core(某些库无法在 Linux 上静态链接;请阅读静态链接系统库、libc、pthreads,以帮助调试)对于像hello, world您这样的玩具程序,可能只需简单地传递给 gcc 就可以逃脱-static,但对于任何健壮的东西,最好动态链接这些基础库。
| 归档时间: |
|
| 查看次数: |
3087 次 |
| 最近记录: |