我的任务是从Linux上的dotnet core调用openzwave,而dotnet core加载我的c++库时遇到问题。基本上,每当我触摸openzwave库时,都会得到一个dll not found异常。
这是我的program.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Runtime.InteropServices;
    using System.Threading.Tasks;

    namespace MinOZWDotNet
    {
        public class Program
        {

            [DllImport("MinOZW")]
            public static extern int Init();

            [DllImport("MinOZW")]
            public static extern int Free();

            public static void Main(string[] args)
            {
                Console.WriteLine("Calling Init");
                var val= Init();
                Console.WriteLine($"retval= {val}");

                while (true)
                {

                    if (Console.KeyAvailable)
                    {

                        ConsoleKeyInfo key = Console.ReadKey();

                        if (key.Key == ConsoleKey.Escape)
                        {
                            Console.WriteLine("Exit");
                            break;
                        }
                    }
                }

                Console.WriteLine("Calling Free");
                val = Free();
                Console.WriteLine($"retval = {val}");

            }
        }
    }

这是.so的有效版本
#ifdef __GNUC__
        #define EXPORT extern "C"
        #define CC
#else
        #define EXPORT extern "C" __declspec (dllexport)
        #define CC __stdcall
#endif

#ifdef __GNUC__

#include <stdlib.h>
#include <unistd.h>

#include "Defs.h"

#else

#include "Windows.h"

#endif



EXPORT int CC Init() {

        return 0;
}

EXPORT int CC Free() {

        return 0;
}

这是给我错误的版本
#ifdef __GNUC__
        #define EXPORT extern "C"
        #define CC
#else
        #define EXPORT extern "C" __declspec (dllexport)
        #define CC __stdcall
#endif

#ifdef __GNUC__

#include <stdlib.h>
#include <unistd.h>

#include "Defs.h"

#else

#include "Windows.h"

#endif


#include "Options.h"
#include "Manager.h"
#include "Driver.h"
#include "Node.h"
#include "Group.h"
#include "Notification.h"
#include "value_classes/ValueStore.h"
#include "value_classes/Value.h"
#include "value_classes/ValueBool.h"
#include "platform/Log.h"

using namespace OpenZWave;


EXPORT int CC Init() {
        Manager::Create();
        return 0;
}

EXPORT int CC Free() {
        Manager::Destroy();
        return 0;
}

openzwave和这个lib都在预期的路径上。
在Windows上编译时,NB可以正常工作。
openZwave on github

最佳答案

您是否尝试过在C程序中使用lib?也许OpenZWave具有一些Linux上缺少的依赖项...

关于c++ - System.DllNotFoundException:无法使用dotnet核心加载DLL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41871068/

10-10 23:34