交叉编译Android NDK的MPICH库

时间:2013-06-14 14:51:33

标签: android openssl arm cross-compiling mpich

我的目标是在Android手机上运行MPICH。我正在使用Debian Jessie。我认为我将在本教程后实现这一目标: http://hex.ro/wp/projects/personal-cloud-computing/compiling-mpich2-for-android-and-running-on-two-phones/ 但是我没有使用Buildroot创建工具链,而是决定从Android NDK创建它,就像在这个网站上一样: http://www.threadstates.com/articles/2013/setting-up-an-android-cross-compiling-environment-with-the-ndk.html  我尝试使用MPICH库版本2.1.4,2.1.5,3.0.4并使用命令配置它:

sudo CFLAGS=" -march=armv5 -mfpu=vfp -static "
 CC=/home/cerbia/android/bin/arm-linux-androideabi-gcc ./configure
 --prefix=/home/cerbia/old --host=arm-linux --with-pm=smpd --disable-f77 --disable-fc

但我仍然遇到这种错误:

  

configure:error:SMPD需要MD5支持,而configure不能   在md5.h中找到md5_calc或在openssl / md5.h中找到MD5

我发现它与openssl版本有关,我试图遵循这条指令:

  

下载,编译,修改和安装OpenSSL到NDK目录。 cd~wget www.openssl.org/source/openssl-1.0.0g.tar.gz tar xvzf

     

openssl-1.0.0g.tar.gz cd openssl-1.0.0g ./config no-asm shared --prefix = $ ANDROID_ROOT / platforms / android-3 / arch-arm / usr

     

编辑Makefile:
   CC = arm-linux-gnueabi-gcc-4.6

     

CFLAG = -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DOPENSSL_N -DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall -fPIC

     

DEPFLAG = -DOPENSSL_NO_GMP -DOPENSSL_NO_JPAKE -DOPENSSL_NO_MD2 -DOPENSSL_NO_R C5 -DOPENSSL_NO_RFC3779 -DOPENSSL_NO_STORE

     

PEX_LIBS =

     

EX_LIBS = -ldl

     

EXE_EXT =

     

ARFLAGS =

     

AR = arm-linux-gnueabi-ar $(ARFLAGS)r

     

RANLIB = arm-linux-gnueabi-ranlib

     

NM = arm-linux-gnueabi-nm

     

PERL = / usr / bin / perl

     

TAR = tar

     

TARFLAGS = --no-recursion

     

MAKEDEPPROG = gcc

     

LIBDIR = LIB

而不是HIPL我尝试以类似的方式交叉编译MPICH

  

下载并交叉编译HIPL。 cd~bzr co lp:hipl trunk cd trunk edit.ac并注释掉所有AM_CFLAGS autoreconf --install

     

./ configure --disable-gcc-warn --disable-firewall -host = arm-linux

     

CC =臂-Linux的gnueabi-GCC-4.6

     

CPPFLAGS = “ - I $ ANDROID_ROOT /平台/机器人-3 /弓形臂的/ usr /包括”

     

CFLAGS = “ - nostdlib”

     

LDFLAGS = “ - WL,-rpath链路= $ ANDROID_ROOT /平台/机器人-3 /拱形臂/ usr / lib中,-L $ ANDROID_ROOT /平台/机器人-3 /拱形臂/ usr / lib中”

     

LIBS =“ - lc”make make all-am make [1]:输入目录`/ home / mkomu / projects / hipl-bzr / arm'CC lib / core / builder.lo in file

     

包含在lib / core / debug.h:34:0,

             from lib/core/crypto.h:43,

             from lib/core/builder.c:100: lib/core/protodefs.h:917:5: error: unknown type name 'in_port_t'
     

lib / core / protodefs.h:929:5:错误:未知类型名称'in_port_t'

     

lib / core / protodefs.h:1027:5:错误:未知类型名称'in_port_t'

     

lib / core / protodefs.h:1036:5:错误:未知类型名称'in_port_t'

     

lib / core / protodefs.h:1043:5:错误:未知类型名称'in_port_t'

     

lib / core / protodefs.h:1054:5:错误:未知类型名称'in_port_t'

     

lib / core / protodefs.h:1055:5:错误:未知类型名称'in_port_t'...

     

它来自网站:bugs.launchpad.net/hipl/+bug/715126

但我和那里的人有同样的错误..

  

make [8]:Wejście做katalogu   `/home/cerbia/old/mpich2-1.3.2/src/mpid/ch3/channels/nemesis/nemesis/netmod/tcp”   CC tcp_finalize.c包含在的文件中   tcp_finalize.c:7:0:tcp_impl.h:108:89:错误:未知类型名称   'in_port_t'make [8]: * [tcp_finalize.o]Błąd1

你有什么建议我应该尝试让它运作吗?

1 个答案:

答案 0 :(得分:0)

在Linux中,in_port_tuint16_t中的netinet/in.h类型定义为sockaddr_in。使用此typedef的唯一位置是in_port_t

的定义

Android NDK未定义或使用unsigned short int,而是使用typedef in_port_t。要使用Android NDK编译代码,请unsigned short int或将其替换为{{1}}。