簡體   English   中英

如何使用單聲道將 .so 文件鏈接到托管 DLL

[英]How to link a .so file to a managed DLL with mono

我正在為使用單聲道執行的 .net 中的 ARM 處理器編寫嵌入式 linux 程序。 我發現我可以簡單地在我的 PC 上編譯為 x86 或 x64 架構,將 Debug 目錄復制到 linux,然后使用 mono myProgram.exe 運行程序。 該程序像這樣完美地工作,mono 似乎解決了架構不匹配問題。 直到今天,當我嘗試合並外部本機 DLL 時都是如此。

我有外部 DLL 的 x86 和 x64 位體系結構,並且都可以在桌面環境中正常工作。 我有一個使用 [DllImport] 加載外部函數的填充類。 但是,當我在使用 Mono 的嵌入式 linux 上嘗試此操作時,出現 BadImageFormat 異常。 我的猜測是 Mono 在啟動時會以某種方式轉換 exe 中已編譯的 DLL,但不會對外部執行相同的操作。

其他一些信息: 1. 我沒有本地外部庫的源代碼。 我有 x86、x64 和一個 .so 庫。 2. 我嘗試制作一個訪問 .so 的管理 C++ shim,但無法在桌面上編譯它,因為 Windows 無法識別 .so 文件。

一些想法: 1. 有沒有辦法將本機 DLL 嵌入到托管中,以便 Mono 也可以轉換本機 DLL? 2. 我可以將 .so 文件鏈接到托管 C++ 項目嗎? 3. 有沒有辦法告訴 Mono 在執行期間合並那個 Dll?

最終,我正在尋找一個包含在 exe 中的解決方案,它允許我像以前一樣簡單地運行它並控制本機系統。

如果您擁有適用於 Windows 和 Linux 的所有 .dll 和 .so 文件,您可能可以使用 Mono 的 dll 映射功能。 ( https://www.mono-project.com/docs/advanced/pinvoke/dllmap/ ) 用於將 Windows dll 名稱映射到 Linux so 名稱。

.Net 不能識別這一點,但 Mono 可以。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM