首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DllImport - DllNotFoundException与android .so

DllImport - DllNotFoundException与android .so
EN

Stack Overflow用户
提问于 2017-09-22 12:23:24
回答 2查看 2.4K关注 0票数 6

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

我正在使用VisualStudio2015-Xamarin。

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

SayHello.h:

代码语言:javascript
复制
#pragma once
#include <string.h>

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

SayHello.cpp:

代码语言:javascript
复制
#include "SayHello.h"
extern "C"
{
    SayHello::SayHello(){}

    SayHello::~SayHello(){}

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

然后,我生成了一个文件libSayHello.so,并使用xamarin创建了一个Android项目,试图调用这个函数hello。这是我的MainActivity.cs:

代码语言:javascript
复制
[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);
}

我在本教程中完成了所有步骤,但我有一个例外:

System.DllNotFoundException: libSayHello.so

我在找这个,但我一定是个菜鸟,因为我什么都没找到。我该如何使用我的libSayHello.so

编辑:

这是我在7zip中看到的libSayHello.so

我的项目是:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-02 05:57:08

我想这将是你的最佳样本

这一切都是根据下列计划进行的:

  1. Android支持7 CPU架构。 但Xamarin支持其中的5种。因此,在Xamarin.Android项目的设置中,检查您将支持哪些体系结构: [Xamarin.Droid.project]->[Properties]->[Android Options]->[Advanced]->[Supported architectures]

检查您的项目所需的archs。根据这一点,您的共享库应该为这些archs编译。您应该将共享库放在Xamarin.Droid.project的文件夹库中:

  1. 要在解决方案资源管理器中看到它们,您应该在Xamarin.Android项目的.CSPROJ中提到它们。 添加下一个项目组: <ItemGroup> <AndroidNativeLibrary Include="lib\{ARCH}\libCLib.so"> <Abi>{ARCH}</Abi> <CopyToOutputDirectory>Always</CopyToOutputDirectory> </AndroidNativeLibrary> </ItemGroup> {ARCH}可能是下一个:armeabi-v7aarmeabiarm64-v8ax86x86_64
  2. 现在,您可以将DllImport放在代码中: DllImport("libCLib",EntryPoint = "clib_add")公共静态extern添加( int左,int右); 我认为您必须告诉有关入口点的信息,因为没有这个语句System.EntryPointNotFoundException.,我就有运行时错误。 别忘了在代码中添加next: using System.Runtime.InteropServices;
票数 3
EN

Stack Overflow用户

发布于 2017-09-25 08:24:05

  1. 确认库放在"/lib/{arch}/“文件夹中。
  2. 试试DllImport("SayHello")。引擎可以自动添加"lib“和".so”。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46364752

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档