是否可以創建一個用rustc編譯的靜態庫並將其鏈接到使用MSVC編譯的可執行文件?Rust和C與Visual Studio兼容
4
A
回答
1
如果你只想使用rustc
產生一個靜態庫,你會在你的箱子的lib.rs
文件中指定的一些屬性,以及標記爲使導出的函數做到這一點:
#![crate_type = "static_lib"]
#![crate_name = "mylib"]
use libc::c_int;
#[no_mangle]
pub extern fn my_exported_func(num: c_int) -> c_int {
num + 1
}
然後,只需調用rustc lib.rs
。這適用於rustc
支持的所有平臺。
在C/C++頭,添加:
#pragma once
// only use extern block if the header is put inside a C++ CU
extern "C" {
int my_exported_func(int num);
}
和鏈接.lib
或.a
根據需要的輸出。
對於貨物,您可以在您的Cargo.toml
中指定貨箱類型和名稱。
來源:
相關問題
- 1. WCF與visual studio 2005的兼容性
- 2. Expression Blend 2012與Visual Studio 2008兼容
- 3. CodeRush Xpress與Visual Studio 2012兼容
- 4. 的Visual Studio 2008和Visual C#2008 Express的兼容性
- 5. Visual Studio 2010和平臺兼容性?
- 6. visual studio向後兼容性
- 7. Visual Studio - vdproj不兼容
- 8. Visual Studio 2012兼容性
- 9. VSIX visual studio 2010兼容
- 10. Visual Studio向後兼容性
- 11. Visual Studio 2010和Visual Studio 2013之間不兼容
- 12. Visual Studio 2008和Visual Studio 2012解決方案是否「兼容」?
- 13. Visual C++ 2010與VC 2008的兼容性
- 14. WiX是否與Visual C#2010 Express兼容?
- 15. c#使用Visual Studio 2010和XMLinterop.dll調用JDE XMLcallobject兼容性
- 16. 爲什麼/ clr在Visual Studio中與/ mt和/ mtd不兼容?
- 17. Visual Studio 2015分支和兼容問題與.vs文件夾
- 18. '/ FP:快' 和 '/ ZA' 不兼容的Visual C++
- 19. Visual Composer與divi兼容嗎?
- 20. Android Studio與Gradle不兼容
- 21. Visual Studio 2017 RC向後兼容Visual Studio 2013解決方案嗎?
- 22. Visual Studio 2012在團隊環境中向後兼容Visual Studio 2010
- 23. Visual Studio 2012 csproj向後兼容2010?
- 24. Visual Studio 2010兼容性問題
- 25. Visual Studio項目的兼容性選項
- 26. Windows 7 Visual Studio 2005兼容性
- 27. DEP兼容Visual Studio應用程序
- 28. 兼容Visual Studio 2013數據庫
- 29. 靜態庫 - Visual Studio 2005/6.0兼容性
- 30. Visual Studio - 靜態庫兼容性(2008,2010)
我想這是理論上的可能;您必須匹配修飾的函數名稱,調用約定,參數和返回類型。爲什麼不創建一個dll並在C中構建一個thunk層?可能最終會變得更加穩定。 – Bathsheba
由於性能的原因,我寧願遠離DLL ...... – Jouan
根據我的經驗,他們很好,你曾經調用函數一次,並且可以緩存函數指針。 – Bathsheba