&引用;未定义对pthread_atfork的引用;当我尝试将libpcsclite移植到Android时

&引用;未定义对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是在仿生库中实现的(不过,它并没有文档记录) 我想你所要做的就是申报使用它 通常的警告:如果使用未记录的方法,它们可能无

Android ndk告诉我
“未定义对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一起工作!请在你的解释中尽量更具描述性