2016-07-29 503 views
1

这是我当前的问题。现在我试图将一个基于x86的项目移植到android。但是这个项目需要pthread库支持,并且不能通过配置阶段。交叉编译为arm时找不到lpthread

命令:

./configure --build=${BUILD_SYS} --host=arm-eabi --prefix=${PREFIX} --disable-rpath --disable-libasprintf --disable-java --disable-native-java --disable-openmp --disable-curses 

编译器和编译标志:

export CFLAGS="--sysroot=${SYSROOT} -I${SYSROOT}/usr/include -I${PREFIX}/include -I${NDK}/sources/android/support/include -pthread -fPIE -DANDROID -Wno-multichar" 
export CXXFLAGS=${CFLAGS} 
export CPPFLAGS="--sysroot=${SYSROOT} -I${SYSROOT}/usr/include -I${PREFIX}/include -I${NDK}/sources/android/support/include -pthread -DANDROID -DNO_XMALLOC -mandroid" 
export LIBS="-lc -lgcc -lstdc++ -ldl" 
export LDFLAGS="-Wl,-L${SYSROOT}/usr/lib -L${PREFIX}/lib -L${NDK_TOOLCHAIN}/lib" 

错误消息:

checking for WIN32... no 
checking for Mac... no 
checking for Linux... compile in linux 
checking for uuid_generate in -luuid... yes 
found library uuid 
checking for pthread_create in -lpthread... no 
configure: error: *** Unable to find pthread library 

请它帮忙:如何安装正确的标志? 如何欺骗autoconf? 如何交叉编译libpthread? AND最后通过编译。

+0

你使用什么特定的交​​叉工具链(目标,版本等)?这个“arm-eabi”目标听起来像是你有一个裸机目标工具链,可能没有pthreads支持。对于Android,您可能希望使用NDK中的arm-linux-androideabi工具链。 – Notlikethat

+0

@Notlikethat,你好,我把主机改为“arm-linux-androideabi”,它仍然有这样的问题。 ANDROID_TARGET = armv7-none-linux-androideabi TOOLCHAIN = arm-linux-androideabi – Jon

回答

2

POSIX线程(并行线程)的Android:

了Android的libc,仿生,提供内置的并行线程的支持,so no additional linking (-lpthreads) is necessary.它不实现充分 POSIX线程功能,并省去了用于读取支持/写锁, pthread_cancel(),进程共享互斥锁和条件变量以及 其他更高级的功能。

因此不需要添加-lpthreads并删除检查。

+0

我看到了这个答案并试了一下。问题是我无法通过autoconf没有任何标志。 – Jon

+0

不要删除所有标志删除pthread相关的东西.... – Mohan

+0

已经删除,并没有正常工作,仍然无法找到pthread – Jon