将 DLLImport 与共享库一起使用时出现 DLLNotFound
DLLNotFound when using DLLImport with shared library
我正在创建一个 .NET Framework 4.0 应用程序,它在 Windows 上启动时使用 DLL,在 Linux(debian 版本 10)上启动时使用 C++ 编写的共享库。
C# 代码看起来像这样:
[DllImport("graf")]
private static extern int Method1();
在 Windows 上,一切正常,应用程序运行良好。
在 Linux,我使用 Wine 启动应用程序。问题是当我尝试使用我的库中的任何方法时,我得到了 DLLNotFoundException: graf
.
我的共享库在 /lib
、/usr/lib
和 exe 文件夹中。我尝试重命名我的库 libgraf.so
并且只重命名 graf.dll
但它不起作用。
我遵循了这个 link 的每一步。但是我不能使用我的 .so 库。
你有解决这个问题的线索吗?
编辑:好的,这似乎是我的共享库编译中的一个问题。
我的问题来自以下事实:1) 我的库编译错误(Makefile 问题);和 2) 我必须在我的函数定义中使用关键字 extern "C" {
。
有关详细信息,请参阅 What is the effect of extern "C" in C++?。
我正在创建一个 .NET Framework 4.0 应用程序,它在 Windows 上启动时使用 DLL,在 Linux(debian 版本 10)上启动时使用 C++ 编写的共享库。
C# 代码看起来像这样:
[DllImport("graf")]
private static extern int Method1();
在 Windows 上,一切正常,应用程序运行良好。
在 Linux,我使用 Wine 启动应用程序。问题是当我尝试使用我的库中的任何方法时,我得到了 DLLNotFoundException: graf
.
我的共享库在 /lib
、/usr/lib
和 exe 文件夹中。我尝试重命名我的库 libgraf.so
并且只重命名 graf.dll
但它不起作用。
我遵循了这个 link 的每一步。但是我不能使用我的 .so 库。
你有解决这个问题的线索吗?
编辑:好的,这似乎是我的共享库编译中的一个问题。
我的问题来自以下事实:1) 我的库编译错误(Makefile 问题);和 2) 我必须在我的函数定义中使用关键字 extern "C" {
。
有关详细信息,请参阅 What is the effect of extern "C" in C++?。