&引用;未定义对pthread_atfork的引用;当我尝试将libpcsclite移植到Android时
Android ndk告诉我&引用;未定义对pthread_atfork的引用;当我尝试将libpcsclite移植到Android时,android,android-ndk,Android,Android Ndk,Android ndk告诉我“未定义对pthread_atfork的引用”,当时我正试图为Android交叉编译libpcsclite 实际上我已经知道Android的仿生库(Android文档)中没有pthread_atfork函数,但是必须在pcsclite库中调用pthread_atfork。在这种情况下有什么解决办法吗?看看这个: 我相信函数pthread_atfork是在仿生库中实现的(不过,它并没有文档记录) 我想你所要做的就是申报使用它 通常的警告:如果使用未记录的方法,它们可能无
“未定义对pthread_atfork的引用”
,当时我正试图为Android交叉编译libpcsclite
实际上我已经知道Android的仿生库(Android文档)中没有pthread_atfork函数,但是必须在pcsclite库中调用pthread_atfork。在这种情况下有什么解决办法吗?看看这个:
我相信函数pthread_atfork是在仿生库中实现的(不过,它并没有文档记录)
我想你所要做的就是申报使用它
通常的警告:如果使用未记录的方法,它们可能无法正常工作,或者将来可能会被弃用。看起来
pthread_atfork()
是在android-10/v2.3.6/Gingerbread之后才出现的。如果您想针对较旧版本的Android,则必须在项目中包含或更新版本,或者根本不使用pthread\u atfork()
-DANDROID_PLATFORM=android-21
此值默认为使用中的NDK支持的最低API级别
在我的上下文中,使用android-9默认值
如果在${ANDROID-NDK}目录上执行下面的shell
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
您会发现这样一条消息:pthread_atfork
是在libc上定义的
因此,当您使用cmake或其他工具交叉编译时,您需要添加-DANDROID_PLATFORM=android-21
[仅gt android-9]
您可以使用cmake尝试此命令
# on you project_root
mkdir build
cd build
cmake -DCMAKE_TOOLCHAIN_FILE=/cross/github/jni/android-ndk-r14b/build/cmake/android.toolchain.cmake -DANDROID_TOOLCHAIN=clang -DANDROID_ABI=armeabi-v7a -DCMAKE_ANDROID_NDK_TOOLCHAIN_VERSION=clang -DANDROID_PLATFORM=android-21 ..
相反,最新NDK中的DOCS/CHANGES.html表示实现了pthread_atfork,但在交叉编译时仍然告诉我“未定义对pthread_atfork的引用”。这与我的问题相同,你在给meI的网站中讨论了这个问题,只是查看了Android开源项目(适用于OS 4.0.2)。有一个文件\bionic\libc\bionic\pthread atfork.c,它有方法pthread_atfork。我还发现了文件pthread atfork.c,不是在我的源代码中,而是在这个网站中。然后我下载了这个c文件,并将其集成到pcsclite源代码中。编译成功!非常感谢。Victor.@bob,你在哪里找到关于正在实现的
pthread\u atfork()
的语句?我找不到它的任何参考资料。你把你的港口发到哪里了吗?我很有兴趣看到智能卡与Android一起工作!请在你的解释中尽量更具描述性