请问,android使用jni开发,能不能使用信号的?

时间:2023-01-04 11:31:37
我无论是使用sigaction()还是使用signal()
在只要我在C文件里加入了上面两个函数,程序一运行就挂了。
我的程序是还没有运行到那里的。
就是,无论我的程序里有没有使用上面两个函数,只要我把上面其中一个函数添加到c文件里,程序就会挂掉。注释掉,程序又正常了。
android 弹出的消息是下面的提示。
06-11 17:28:50.094  29406-29406/? E/dalvikvm﹕ dlopen("/data/app-lib/com.example.administrator.fft-1/libvoice_fft_play.so") failed: dlopen failed: cannot locate symbol "signal" referenced by "libvoice_fft_play.so"...
06-11 17:28:50.094  29406-29406/? W/dalvikvm﹕ Exception Ljava/lang/UnsatisfiedLinkError; thrown while initializing Lcom/example/administrator/fft/MaiUsTick;
06-11 17:28:50.094  29406-29406/? W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x41adfc50)

5 个解决方案

#1


cannot locate symbol "signal" referenced by "libvoice_fft_play.so"

signal()函数在载入so时候根本找不到哦,说明编译时候函数地址没有链接对。

#2


引用 1 楼 nj_dobetter 的回复:
cannot locate symbol "signal" referenced by "libvoice_fft_play.so"

signal()函数在载入so时候根本找不到哦,说明编译时候函数地址没有链接对。

#include <signal.h>
头文件已经加入了,编译已经通过了,没错误没警告。这应该就没问题了吧。

#3


百度搜 cannot locate symbol "signal" referenced by 看看吧
我猜你编译的环境和你运行的环境可能不一样

#4


引用 3 楼 sxhebing 的回复:
百度搜 cannot locate symbol "signal" referenced by 看看吧
我猜你编译的环境和你运行的环境可能不一样

在栈溢出找到问题了
signal was an inline function until platform android-21, now it's not inline anymore.

When you use the ndk r10, android-21 is used by default but it's not fully retro-compatible with devices running former Android versions. In your case, signal can't be found on your device (but it would run properly on Lollipop).

When using the NDK, you should use the platform (APP_PLATFORM:=android-XX) that corresponds to your android:minSdkVersion.

So here you can set APP_PLATFORM:=android-15 inside Application.mk Makefile, and your lib will use the inline version of signal, so it will not look for its symbol at runtime.

害死人啊…………我把版本换成19的来编译就不挂了。21版本的signal只有5.0的能正常使用。。。。。。。。。。

#5


请问AS中 Application.mk在哪里改?

#1


cannot locate symbol "signal" referenced by "libvoice_fft_play.so"

signal()函数在载入so时候根本找不到哦,说明编译时候函数地址没有链接对。

#2


引用 1 楼 nj_dobetter 的回复:
cannot locate symbol "signal" referenced by "libvoice_fft_play.so"

signal()函数在载入so时候根本找不到哦,说明编译时候函数地址没有链接对。

#include <signal.h>
头文件已经加入了,编译已经通过了,没错误没警告。这应该就没问题了吧。

#3


百度搜 cannot locate symbol "signal" referenced by 看看吧
我猜你编译的环境和你运行的环境可能不一样

#4


引用 3 楼 sxhebing 的回复:
百度搜 cannot locate symbol "signal" referenced by 看看吧
我猜你编译的环境和你运行的环境可能不一样

在栈溢出找到问题了
signal was an inline function until platform android-21, now it's not inline anymore.

When you use the ndk r10, android-21 is used by default but it's not fully retro-compatible with devices running former Android versions. In your case, signal can't be found on your device (but it would run properly on Lollipop).

When using the NDK, you should use the platform (APP_PLATFORM:=android-XX) that corresponds to your android:minSdkVersion.

So here you can set APP_PLATFORM:=android-15 inside Application.mk Makefile, and your lib will use the inline version of signal, so it will not look for its symbol at runtime.

害死人啊…………我把版本换成19的来编译就不挂了。21版本的signal只有5.0的能正常使用。。。。。。。。。。

#5


请问AS中 Application.mk在哪里改?