使用VisualStudio -P Indoke构建C DLL
Build C++ DLL with VisualStudio - PInvoke on Linux
这是我要实现的目标:在Visual Studio上构建本机C DLL库,并通过C#应用程序通过Pinvoke在Ubuntu Linux Mono上调用其'方法。简化的代码:
[DllImport("MyLib")]
static extern int MyFunction();
static void Main(string[] args)
{
int result = MyFunction();
}
在窗户上它的工作方式就像魅力。我在单声道上运行此示例应用程序,但是我有错误:DllNotFoundException
。当我启用单声道调试(MONO_LOG_LEVEL="debug" mono MyApp.exe
)时,我可以看到找到此DLL,但由于错误而无法加载:"无效的Elf Header"。我想必须用一些特殊标志对DLL进行编译,因此Linux可以识别它。如何做?
由Visual Studio Targets Windows提供的C 编译器。您正在尝试在Linux上执行代码,因此您需要使用针对Linux的编译器编译代码。您只是无法在Linux上本地执行Windows DLL。
您的解决方案是将源代码带到Linux C 编译器和编译器linux共享对象库。
这是行不通的。非托管库是特定于您正在运行的平台的特定库,因此在Linux上使用Mono,您的非管理库必须是.so
。
根据单声道文档,您必须将 DllImport
链接到X
,而单声道应进行名称翻译。
例如:
[DllImport("X")]
static extern int MyFunction();
此行应针对Windows上的X.dll
链接,Linux上的libX.so
和Mac OS X上的X.dylib
和CC_8链接。>
请注意,即使您在本地进行编译,它使用本机API(例如Win32 API),它也不会在其他平台上编译。您必须使用跨平台开发工具,库和模式来解决这些问题。
相关文章:
- 如何从Cygwin下构建的C++程序链接到DLL
- 为什么它无法在 c++ 中全局声明一个构建为 dll 文件的类?
- C\C++构建的dll在LabView中实时运行
- 如何在没有任何依赖库的情况下在Visual Studio中构建dll?
- MFC/DLL中缺少ATL :: CSTRINGT功能,该功能与Clang/vs-2019构建
- Microsoft Visual Studio 2008,版本9.0.30739.1 SP,DLL构建错误
- 如何在 go 中调用带有 .lib 和.dll文件的预构建 API
- 在构建服务器上将 dll C++生成到两个平台 (x86+x64)
- 复制C DLL以构建任何C#项目的输出,以扩展为参考
- 如何在C 构建器中动态声明C#DLL
- 如何在运行时构建DLL
- 构建不依赖于MSVCR120.DLL的自定义英特尔 MKL DLL
- 当您的外部SDK仅具有.dll,.lib,.h文件时,如何链接和构建项目
- 使用Cmake与Visual Studio 2017一起构建ssh.dll
- CodeBlocks:如何使用wxWidgets库DLL构建C++应用程序
- 如何使用Cmake为SimuroSot模拟器构建(从DevCpp转换)Win32 DLL
- 节点插件节点-gyp 构建缺少 V8 dll 的
- 调用从.NET Core中的C++项目构建的.dll时出现BadImageFormatException
- 制定目标需要32和64位的DLL构建
- 内联类函数和共享库(dll)构建