rasp on raspberry pi上的DLL会在共享对象(.so)文件的DLLImport处抛出DLLNotFoundException

时间:2013-07-08 09:14:08

标签: c# mono dllimport raspberry-pi dllnotfoundexception

我目前正在使用树莓派(B)上的单声道运行时间。我使用Visual Studio Express 2012 for Windows Desktop。我基本上想要实现的是将一系列图片从网络摄像头(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,但这也没有改变任何东西。

BTW我将.so文件的访问权限更改为755(读取,写入,执行root和读取,执行for world)。

老实说,我对DLL-Import的东西并不是很了解,所以我可能会在这里犯一些愚蠢的错误。不过我上周已在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/)并且它有效,但它不是特别快但它确实保存了一张图片。 我发现它们使用硬浮动的raspbian图像有点恼火,即使mono与ARM hard-float abi不兼容。 在单声道安装指南中,他们也没有提到任何硬浮动补丁,我甚至在RaspberryCam项目的源代码中找到了一些解决方法,因此他们确实注意到在hard-float abi上运行mono时遇到的错误。 / p>

来自“PicturesCache.cs”的片段

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

但是,我将坚持使用软浮动,只需使用一个名为uvccapture的工具与一些shell脚本协作来完成这项工作。

然而,我仍然感谢您的任何建议或解决方案。

3 个答案:

答案 0 :(得分:1)

什么对我有用:我在.exe文件夹中复制了lib,并将其重命名为libRaspberryCam.so。

就我而言,质量非常差。我无法从此lib配置相机。

答案 1 :(得分:0)

你试过

吗?
$sudo make
$sudo make install

验证对RaspberryCam.so的访问权限并将其修复为chmod。

再见

答案 2 :(得分:0)

我有相同的异常,它通过将RaspberryCam.so复制到/ usr / lib(而不是root / lib)得到解决