Android ndk告诉我"undefined reference to pthread_atfork"
我试图交叉编译libpcsclite for Android
实际上我已经知道Android(Android文档)的Bionic库中没有pthread_atfork函数,但必须在pcsclite库中调用pthread_atfork。在这种情况下有没有解决方案?
答案 0 :(得分:0)
看看这个:http://comments.gmane.org/gmane.comp.handhelds.android.ndk/15982
我相信函数pthread_atfork是在Bionic库中实现的(但是,没有记录)。
我认为您所要做的就是声明要使用它。
通常的警告:如果您使用未记录的方法,它们可能无法正常工作或将来可能会被弃用。
答案 1 :(得分:0)
在android-10 / v2.3.6 / Gingerbread之后看起来pthread_atfork()
不是added to bionic libc。如果您要定位旧版Android,则必须在项目中加入pthread-atfork.c或较新的pthread_atfork.cpp,或者根本不使用pthread_atfork()
。
答案 2 :(得分:0)
PROGRAM
此值默认为使用中的NDK支持的最低API级别
在我的上下文中,使用android-9默认值。
如果您在$ {ANDROID-NDK} DIR上执行以下shell,
-DANDROID_PLATFORM=android-21
find_path=$1
grep_str=$2
SOS=`find ${find_path} -name *.so`
for item in $SOS
do
echo ======= $item
objdump -Tt $item |grep ${grep_str}
done
输出:
sh echo.sh . pthread_atfork
您会发现以下消息:======= ./platforms/android-9/arch-mips/usr/lib/libc.so
======= ./platforms/android-12/arch-x86/usr/lib/libc.so
00009420 g F .text 0000000a pthread_atfork
00009420 g DF .text 0000000a LIBC pthread_atfork
是在libc.so上使用android-12而不是android-9定义的。
因此,当您使用cmake或其他工具进行交叉编译时,您需要添加pthread_atfork
[仅gt android-9]
您可以使用cmake尝试此命令
-DANDROID_PLATFORM=android-21