gpt4 book ai didi

android - DllImport - DllNotFoundException 与 android .so

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:00:46 24 4
gpt4 key购买 nike

这是我第一次尝试为 Android/iOS 创建一个库 c++。

我正在使用 Visual Studio 2015 - Xamarin。

首先我创建了一个项目:Visual C++ -> 跨平台 -> 共享库。在 hared 库中,我创建了 2 个文件。

问好.h :

#pragma once
#include <string.h>

class SayHello {
public:
SayHello();
~SayHello();
static char* Hello();
};

问好.cpp :

#include "SayHello.h"
extern "C"
{
SayHello::SayHello(){}

SayHello::~SayHello(){}

char * SayHello::Hello()
{
return "Hello !";
}
}

然后我生成了一个文件 libSayHello.so 并用 xamarin 创建了一个 Android 项目来尝试调用函数 hello。有我的 MainActivity.cs :

[DllImport("libSayHello.so")]
static extern String Hello();

protected override void OnCreate(Bundle bundle)
{
// I paste only my added code :
String hello = Hello();
Toast.MakeText(this.ApplicationContext, hello, ToastLength.Long);
}

我完成了 this tutorial 中的所有步骤,但我有一个异常(exception):

System.DllNotFoundException: libSayHello.so

我搜索过这个,但我一定是菜鸟,因为我没有找到任何东西。我应该如何使用我的 libSayHello.so

编辑:

我的 libSayHello.so 是用 7zip 看到的:

enter image description here

还有我的项目:

enter image description here

最佳答案

我认为这将是 the best sample给你。

这一切都按照以下方案进行:

  1. Android 支持 7 种 CPU 架构。

    但 Xamarin 支持其中的 5 个。因此,在 Xamarin.Android 项目的设置中检查您将支持哪些架构:

    [Xamarin.Droid.project]->[Properties]->[Android Options]->[Advanced]->[Supported architectures]

enter image description here

检查您的项目需要哪些架构。根据这个你的共享库应该为这些拱门编译。您应该将共享库放在 Xamarin.Droid.project 的文件夹 lib 中:

enter image description here

  1. 要在解决方案资源管理器中查看它们,您应该在 Xamarin.Android 项目的 .CSPROJ 中提及它们。

    添加下一个项目组:

    <ItemGroup>
    <AndroidNativeLibrary Include="lib\{ARCH}\libCLib.so">
    <Abi>{ARCH}</Abi>
    <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </AndroidNativeLibrary>
    </ItemGroup>

    {ARCH} 可能是下一个:armeabiarmeabi-v7aarm64-v8ax86x86_64

  2. 现在您可以将 DllImport 放入您的代码中:

    [DllImport("libCLib", EntryPoint = "clib_add")]
    public static extern int Add(int left, int right);

    我想你必须告诉入口点,因为如果没有这个语句 System.EntryPointNotFoundException 我会遇到运行时错误。

    并且不要忘记在您的代码中添加 next:

    using System.Runtime.InteropServices;

关于android - DllImport - DllNotFoundException 与 android .so,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46364752/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com