2013-03-22 25 views
2

我想從Unity3D調用簡單的本地函數(C++)。我也做了以下內容:Unity3d中<文件名未知>中的s​​ystem.entrypointnotfoundexception

  1. 放在libMSDKWrapper.so在資產 - >插件 - > Android的

  2. 這是我的C#代碼

    using UnityEngine; 
    using System.Collections; 
    using System.Runtime.InteropServices; 
    
    public class facebooktest : MonoBehaviour { 
    
        [DllImport ("MSDKWrapper")] 
        private static extern long getContextNative(); 
    
        void Start() { 
         Debug.Log("Hello, World!"); 
         long context = getContextNative(); // <-- Exception thrown here 
         Debug.Log(context); 
         } 
    } 
    

我收到以下異常:

system.entry pointnotfoundexception在[0x00000]在文件名不明:0

我使用命令

的System.loadLibrary( 「MSDKWrapper」)中使用的相同libMSDKWrapper.so用java;

我能夠訪問和使用getContextNative()方法。

編輯1:我解壓縮的apk的內容,並發現libMSDKWrapper.so文件存在於test.apk/LIB/armeabi-V7A

編輯2:下面是logcat的日誌。 03-25 11:40:17.543:D/dalvikvm(26176):試圖加載lib /data/data/com.disney.citygirl.goo/lib/libMSDKWrapper.so 0x41566348 03-25 11:40:17.568: D/MSDK(26176):註冊提供程序:SN_COMMUNITY 03-25 11:40:17.568:D/MSDK(26176):註冊提供程序:SN_FACEBOOK 03-25 11:40:17.568:D/dalvikvm(26176):Added共享lib /data/data/com.disney.citygirl.goo/lib/libMSDKWrapper.so 0x41566348 03-25 11:40:17.568:I/MSDK(26176):JNI_OnLoad調用 03-25 11:40:17.573: D/dalvikvm(26176):試圖加載lib /data/data/com.disney.citygirl.goo/lib/libMSDKWrapper.so 0x41566348 03-25 11:40:17.573:D/dalvikvm(26176):Shared lib' /data/data/com.disney.citygirl.goo/lib/libMSDKWrapper.so'已經載入相同的CL 0x41566348 03-25 11:40:17.598:I/Unity(26176): System.EntryPointNotFoundException:getContextNative 03:11:40:17.598:I/Unity(26176):at(wrapper managed-to-native)SocialAccess:getContextNative() 03-25 11:40:17.598:I/Unity 26176):在SocialAccess.OnClick()[0x00000]中:0 03-25 11:40:17.598:I/Unity(26176):
03-25 11:40:17.598:I/Unity(26176): (文件名:./Runtime/ExportGenerated/AndroidManaged/UnityEngineDebug.cpp行數:43)

+0

我們需要查看.dll實現。可能存在缺失的依賴關係。 – Jerdak 2013-03-22 15:03:07

回答

2

您正在使用C++插件,但也許您的Unity3D版本不支持它?我記得你需要Pro來做到這一點。

This page可能會提供解決方案。

+0

這是我所關注的頁面。我也有Unity Pro的30天評估版。 – 2013-03-22 14:47:40

0

確保您使用extern'c'指令來避免name-mangling issues。如果你沒有用'c'方法名稱'打包'你的調用,你會得到這個確切的行爲,因爲C++編譯器'mangles'或爲方法名稱添加了額外的特定架構'垃圾'。如果您有任何疑問,可以參考我的github項目HERE

專注於主。cpp(在android-src /和在根中相同的入口點)。這是你需要模擬你的C++ dll後的模式。這個項目還將向你展示如何爲android構建一個C++ dll。查看README,瞭解Ubuntu(以及其他類似Debian的操作系統)和android的完整構建說明。

@Virtlink我知道它是一個只支持pro的功能,但看起來Unity在使用p/invokes時會發出警告。如果Unity在V4中修復了這個問題,我不會使用它,但V3允許您使用它們。審判也足夠了。

就像另一個說明,是否有一個特定的原因,你需要使用C++的DLL?在幾乎所有情況下,您都可以在託管的C#代碼中執行您想要的操作。請確保你需要這個DLL,因爲它會打破與單個代碼庫的交叉兼容性。隨着我的DLL,我決定放棄我的用例,並重新寫在C#的整個事情。

相關問題