2023-01-20 341
我有一些Java和C ++代码,可以在两个平台上编译并构建本机库.我可以验证库是否包含我期望的功能,Java可以将库加载在Android和iOS上.在Android上,一切都没有崩溃而顺利进行,但是在iOS上,我会遇到一个非常令人沮丧的错误:
2015-05-11 11:34:48.418 IOSLauncher[52454:851038] [info] test: initializing native libraries...
2015-05-11 11:34:48.418 IOSLauncher[52454:851038] [info] test: library path set to: "/Users/test/Library/Developer/CoreSimulator/Devices/A189459D-B2D5-4E78-A6E4-A7EAD19DA017/data/Containers/Bundle/Application/DF265D55-DA3C-4C10-851D-20591C4C8C06/IOSLauncher.app"
2015-05-11 11:34:48.419 IOSLauncher[52454:851038] [info] test: loading native libraries on x86_64...
2015-05-11 11:34:48.419 IOSLauncher[52454:851038] [info] test: test
2015-05-11 11:34:48.424 IOSLauncher[52454:851038] [info] test: loaded libraries successfully
java.lang.UnsatisfiedLinkError: com/test/Native.getPointer()J
at com.test.Native.getPointer(Native Method)
at com.test.WavApp.initNativeEngine(WavApp.java)
at com.test.WavApp.create(WavApp.java)
at com.badlogic.gdx.backends.iosrobovm.IOSGraphics.draw(IOSGraphics.java)
at com.badlogic.gdx.backends.iosrobovm.IOSGraphics$1.draw(IOSGraphics.java)
at com.badlogic.gdx.backends.iosrobovm.IOSGraphics$1.$cb$drawRect$(IOSGraphics.java)
at org.robovm.apple.uikit.UIApplication.main(Native Method)
at org.robovm.apple.uikit.UIApplication.main(UIApplication.java)
at com.test.IOSLauncher.main(IOSLauncher.java)
BUILD SUCCESSFUL
Total time: 18.262 secs
com/test/test/andation.java中的Java代码的快照:
static
{
System.loadLibrary("test");
Log.i("loaded libraries successfully");
}
public static native long getPointer();
public static native void freePointer(long enginePointer);
和编译为libtest.dylib的C ++代码:
extern "C"
{
JNIEXPORT jlong JNICALL Java_com_test_Native_getPointer(JNIEnv* env, jobject thiz)
{
return (jlong)(new PointerTest());
}
JNIEXPORT void JNICALL Java_com_test_Native_freePointer(JNIEnv* env, jobject thiz,
jlong enginePtr)
{
if ((PointerTest*)enginePtr)
delete (PointerTest*)enginePtr;
}
}
有关内置共享库的更多信息:
Release$ file libtest.dylib
libtest.dylib: Mach-O 64-bit dynamically linked shared library x86_64
并验证导出:
$ nm -g libtest.dylib | grep Native
0000000000011ce0 T _Java_com_test_Native_freePointer
0000000000011c40 T _Java_com_test_Native_getPointer
有什么想法吗?这使我疯狂了几个小时.我可以通过简单地使用其他库并搜索该功能来在我的Android设备上重现此错误.我猜Xcode是某种程度上隐藏或剥夺了符号,但这似乎与我的nm输出无关,而我的nm表明它们在那里.
在这一行中,解决方案像往常一样在我面前:
libtest.dylib: Mach-O 64-bit dynamically linked shared library x86_64
为iOS构建,架构应为ARMV7+.配置错误的Xcode子标记.
以上所述是小编给大家介绍的在iOS上出现了UnsatisfiedLinkError,但在Android上没有,loadLibrary总是成功的。,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!
原文链接:https://77isp.com/post/26085.html
=========================================
https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。
数据库技术 2022-03-28
网站技术 2022-11-26
网站技术 2023-01-07
网站技术 2022-11-17
Windows相关 2022-02-23
网站技术 2023-01-14
Windows相关 2022-02-16
Windows相关 2022-02-16
Linux相关 2022-02-27
数据库技术 2022-02-20
抠敌 2023年10月23日
嚼餐 2023年10月23日
男忌 2023年10月22日
瓮仆 2023年10月22日
簿偌 2023年10月22日
扫码二维码
获取最新动态