C/C++教程

Rust 静态调用 C++

本文主要是介绍Rust 静态调用 C++,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

使用 cmake 的局限性

.lib 合并问题

cmake 不会将多个 .lib 合并, 因此可能需要使用 add_custom_command 命令手动使用 MSVC 工具 lib.exe 来创建最终具有 C ABI 的 .lib 静态库文件供Rust调用.

set(Target "output")
add_library("${Target}" STATIC lib.cpp)

target_include_directories("${App}" PUBLIC "${CMAKE_HOME_DIRECTORY}/src")
target_link_libraries("${App}" Win32Helper)   # 很遗憾, output.lib 中对另一个静态库Win32Helper的调用是未寻址的!

其它的解决办法:

  1. 合并代码, 不拆分成多个库的形式
  2. 尝试在Rust中将多个.lib都进行链接 (繁琐, 实验后未成功)
set(Target "output")
file(GLOB_RECURSE files RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" ../Win32Helper/*.c)
add_library("${Target}" STATIC lib.cpp ${files})

END

这篇关于Rust 静态调用 C++的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!