Android ndk Android NDK和共享库(libskia_Android.so)

Android ndk Android NDK和共享库(libskia_Android.so),android-ndk,Android Ndk,当我调用在头文件中声明和定义的方法时,我得到了SIGSEGV! 当我调用未在头文件中定义的方法(它们在.cpp文件中实现)时,一切正常 链接器是如何工作的?如何解决这个问题 谢谢我知道问题出在哪里了! 在Android.mk中必须包含“LOCAL\u CFLAGS+=-DSKIA\u DLL”。 这将阻止实例计数。实例计数依赖于静态数据 头文件中定义的函数中的变量,这些变量增加了类的大小并更改了应用程序二进制接口(ABI) 哪种方法导致SIGSEGV?请提供名称好吗?类别“SkPath”;方法“

当我调用在头文件中声明和定义的方法时,我得到了SIGSEGV! 当我调用未在头文件中定义的方法(它们在.cpp文件中实现)时,一切正常

链接器是如何工作的?如何解决这个问题


谢谢

我知道问题出在哪里了! 在Android.mk中必须包含“LOCAL\u CFLAGS+=-DSKIA\u DLL”。 这将阻止实例计数。实例计数依赖于静态数据
头文件中定义的函数中的变量,这些变量增加了类的大小并更改了应用程序二进制接口(ABI)

哪种方法导致SIGSEGV?请提供名称好吗?类别“SkPath”;方法“constskrect&getBounds()const”;这是SkPath.h const SkRect&getBounds()const{return fPathRef->getBounds();}中的定义。如果我将定义放在SkPath.cpp中并重新编译libskia_android,那么一切正常!我在谷歌上搜索了这个函数,发现了一个有点不同的定义。你确定你在同一版本中使用了头文件和二进制文件吗?这是我的第一个想法,但我100%确定。有点不清楚:当你调用a)方法而不是getBounds()或b)getBounds(),它们的定义被移动到.cpp文件中时,一切都正常吗?