我在xcode中创建了一个静态cocos项目,整个项目由一个名为File.c的.c文件和这个函数组成:
int Get10()
{
return 10;
}
我为它创建了一个名为'Numbers'的目标并构建了一个项目,它创建了一个libNumbers.a。我将libNumbers.a移动到我的MonoTouch项目根目录以及我添加的其他mtouch参数区域:
-gcc_flags“-L $ {ProjectDir} -lNumbers -force_load $ {PROJECTDIR} /libNumbers.a“
代码编译得很好。
因此,在我的MonoTouch项目的C#文件中,我添加了以下内容:
[DllImport ("libNumbers.a")]
private static extern int Get10 ();
(我也尝试过[DllImport(“Numbers.a”)])
然后在异常期间调用一个名为Get10()的函数。这会引发以下异常:
System.DllNotFoundException:libNumbers.a at(wrapper 托管到原生)Jabber.BaseGame:Get10()在Jabber.BaseGame.Draw (Microsoft.Xna.Framework.GameTime dt)[0x00043] in /Users/ahmedhakeem/Documents/Projects/goodjabberengine/MyCode/Engine/BaseGame.cs:103
从我所看到的情况来看,它似乎无法找到有问题的dll。
一个可能的原因是我将函数Get10(并将其导入)调用到单独的库项目中的源文件(即不是我添加了额外的mtouch参数的项目)。没有办法将mtouch参数添加到你正在链接的monotouch中的库项目中,所以我不认为这是一个选项。
关于如何解决这个问题的任何想法?
答案 0 :(得分:3)
如果符号变为内部符号(在主应用程序内),则库与应用程序链接。在这种情况下,正确的声明将是:
[DllImport ("__Internal")]
extern static void YourLinkedNativeCode ();