簡體   English   中英

覆盆子pi上的mono在共享對象(.so)文件的DLLImport上引發DLLNotFoundException

[英]mono on raspberry pi throws DLLNotFoundException at DLLImport of shared object (.so) file

我目前正在樹莓派(B)上使用單聲道運行時。 我將Visual Studio Express 2012用於Windows桌面。 我基本上想要實現的是將一系列圖像從網絡攝像頭(Logitech C270)保存到.jpg文件。

我發現一個似乎可以滿足我需要的項目: http : //www.raspberry-sharp.org/romain-flechner/2012/10/projects/use-a-webcam-plugged-in-a-raspberry-pi -with-mono-in-c-using-raspberrycam /所以我通過NuGet將其安裝到我的項目中並復制了代碼示例:

Cameras cameras = Cameras.DeclareDevice()
.Named(“Camera 1″).WithDevicePath(“/dev/video0″)
.Memorize();

cameras.Get(“Camera 1″).SavePicture(new PictureSize(640, 480), “/var/www/test.jpg”, 20);

按照項目頁面上的說明,我將RaspberryCam.so復制到了/ lib目錄中(為此我也將其復制到了/ Lib中)。 然后,我將生成的文件(my.exe,RaspberryCam.dll)下載到我的Raspberry PI。

現在這是我的問題:每當我嘗試使用mono執行程序時,我都會為RaspberryCam.so收到DllNotFoundException。

我將項目路徑添加到/etc/ld.so.conf並運行ldconfig,但這無濟於事。

我還嘗試了在調試模式下運行mono(MONO_LOG_LEVEL =“ debug” MONO_LOG_MASK =“ dll” mono /var/www/my.exe),它似乎正在搜索“ libRaspberryCam.so”,因此我復制了/ lib / RaspberryCam .so到/lib/libRaspberryCam.so,但這也沒有任何改變。

順便說一句,我將.so文件的訪問權限更改為755(讀,寫,為root執行和讀,為world執行)。

老實說,我對DLL導入的東西了解不多,所以我可能在這里犯了一些愚蠢的錯誤。 但是上周我已經在raspberrycam項目頁面上寫過評論,但是我還沒有得到任何答案。

誰能幫我解決這個問題?

謝謝多米尼克

編輯:實際DLLImport的代碼來自Raspberrycam項目“ RaspberryCamInterop.cs”:

using System;
using System.Runtime.InteropServices;

namespace RaspberryCam.Interop
{
    public class RaspberryCamInterop
    {
        [DllImport("RaspberryCam.so", EntryPoint = "TakePicture")]
        public static extern PictureBuffer TakePicture(string device, uint width, uint height, uint jpegQuantity);

        [DllImport("RaspberryCam.so", EntryPoint = "OpenCameraStream")]
        public static extern IntPtr OpenCameraStream(string device, uint width, uint height, uint fps);

        [DllImport("RaspberryCam.so", EntryPoint = "CloseCameraStream")]
        public static extern void CloseCameraStream(IntPtr src);

        [DllImport("RaspberryCam.so", EntryPoint = "ReadVideoFrame")]
        public static extern PictureBuffer ReadVideoFrame(IntPtr src, uint jpegQuantity);

        [DllImport("RaspberryCam.so", EntryPoint = "GrabVideoFrame")]
        public static extern PictureBuffer GrabVideoFrame(IntPtr src);
    }
}

編輯2:似乎是浮游式喘息的問題。 我現在已經安裝了標准的硬浮動raspbian(如項目頁面上的指南中所寫: http ://www.raspberry-sharp.org/eric-bezine/2012/10/mono-framework/installing-mono -raspberry-pi / ),並且效果不錯,雖然速度不是特別快,但確實可以保存圖片。 我感到有些惱火的是,即使mono與ARM硬浮動abi不兼容,他們也使用了硬浮動的樹莓派圖像。 在mono安裝指南中,他們也沒有提到任何硬浮動補丁,而且我什至在RaspberryCam項目的源代碼中發現了一些變通辦法,因此他們的確注意到與在硬浮動abi上運行mono有關的錯誤。

來自“ PicturesCache.cs”的摘錄

//Timespan bug with ARM version of MONO, so we will use int in milliseconds
private readonly int duration;

但是,我將堅持使用軟浮起的微調,僅使用與一些shell腳本配合使用的名為uvccapture的工具來完成這項工作。

但是,我仍然感謝您的任何建議或解決方案。

對我有用的是:我將lib復制到.exe文件夾中,並將其重命名為libRaspberryCam.so。

在我這邊,質量很差。 我無法從此庫配置相機。

你嘗試過

$sudo make
$sudo make install

驗證對RaspberryCam.so的訪問權限,並將其修復為chmod。

再見

我有同樣的異常,通過將RaspberryCam.so復制到/ usr / lib(而不是根目錄/ lib)來解決。

暫無
暫無

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

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