我有两个相互依赖的跨平台Rust项目。项目A是主应用程序,生成主可执行文件和包含公共依赖项的动态库。项目B包含应用程序的插件,每个插件都作为动态库分发,依赖于Project A公共库。
由于这两个项目是分开的,因此Cargo使用项目A和B构建公共库。在Windows上,两个构建之间的符号名称修改不一致,这意味着Project B插件不能使用从项目生成的公共库构建,反之亦然。我还尝试在Project A公共库中的相关符号上放置#[no_mangle]
指令,但在Windows上,它在Project B构建中被忽略。
在Linux上,符号名称在两个版本之间是一致的,有或没有#[no_mangle]
指令。
在Windows版本上可能导致这种不一致的原因以及如何解决?我想将这两个项目分开,以便将来更容易开发新的插件。
所有测试都是在Windows 10和CentOS 7上使用Rust 1.13.0完成的。在Windows上使用MSVC和GNU ABI会出现此问题,但应用程序最终需要使用MSVC ABI进行编译。