我正在尝试使用我的MonoTouch应用程序访问的一些本机代码函数来创建DLL。我遵循monotouch-bindings使用的一般方法,你在:
..但每当我尝试在我的应用程序中使用这些函数时,我都会收到System.EntryPointNotFoundException。这是我正在尝试做的每件事的代码:
在.cpp文件中:
extern "C" {
int SomeFunction();
}
int SomeFunction() {
...
}
用于构建.a文件的命令行
xcodebuild -project MyStaticLibrary.xcodeproj -target MyStaticLibrary -sdk iphonesimulator -configuration Release clean build
带有绑定的.cs文件(NativeBindings.cs)
public class MyStaticLibraryBindings
{
[ DllImport( "__Internal" ) ] public extern static int SomeFunction();
}
DLL的AssemblyInfo.cs
using System;
using MonoTouch.ObjCRuntime;
[assembly: LinkWith ("libMyStaticLibrary.a", LinkTarget.Simulator | LinkTarget.ArmV7 | LinkTarget.ArmV7s, IsCxx = true, ForceLoad = true, Frameworks = "", WeakFrameworks = "")]
构建.dll的命令行
btouch -x=NativeBindings.cs AssemblyInfo.cs --out=NativeBindings.dll --link-with=libMyStaticLibrary.a,libMyStaticLibrary.a
.. DLL构建正常,我的应用程序在编译期间看到MyStaticLibraryBindings.SomeFunction函数,但在运行时,当我调用它时,我得到System.EntryPointNotFoundException。
我已经确认libMyStaticLibrary.a 包含SomeFunction:
~/build> nm libMyStaticLibrary.a*
00000167 T _SomeFunction
答案 0 :(得分:2)
此外,当您尝试P / Invoke _SomeFunction
时,图书馆中的符号为SomeFunction
。我遇到过一些只能使用正确的前缀
答案 1 :(得分:1)
如果问题发生在设备上,那是因为你正在为模拟器构建本机库,而你正在为armv7,armv7s和模拟器构建dll。 您需要构建本机库3次,每次针对每个目标体系结构,将它们组合在一起:
lipo -create -output libMyStaticLibrary.a libMyStaticLibrary-armv7.a libMyStaticLibrary-armv7s.a libMyStaticLibrary-simulator.a