未找到架构i386的libcrypto.a符号

时间:2015-04-01 11:54:40

标签: xcode

xcode 6.3 beta

我在我的项目中使用libcrypto.a。

我的应用可以在我的ipod touch5(armv7)上编译和运行。

但是当我尝试在iphone5模拟器上运行我的应用程序时,我收到错误:

  "_closedir$UNIX2003", referenced from:
      _OPENSSL_DIR_end in libcrypto.a(o_dir.o)

  "_fputs$UNIX2003", referenced from:
      _write_string in libcrypto.a(ui_openssl.o)
      _read_string in libcrypto.a(ui_openssl.o)

  "_opendir$INODE64$UNIX2003", referenced from:
      _OPENSSL_DIR_read in libcrypto.a(o_dir.o)

  "_readdir$INODE64", referenced from:
      _OPENSSL_DIR_read in libcrypto.a(o_dir.o)
ld: symbol(s) not found for architecture i386

然后我使用命令检查了libcrypto.a我正在使用支持的架构:

lipo -info libcrypto.a

并得到结果:

Architectures in the fat file: libcrypto.a are: i386 armv7 armv7s arm64 

任何建议都将不胜感激,谢谢:)

1 个答案:

答案 0 :(得分:6)

在任何地方创建新的m文件。 并在此处定义所有缺失的函数:

#include <stdio.h> 
#include <unistd.h> 
#include <string.h>
#include <stdlib.h>
#include <dirent.h>
#include <fnmatch.h>

FILE *fopen$UNIX2003( const char *filename, const char *mode )
{
    return fopen(filename, mode);
}

int fputs$UNIX2003(const char *res1, FILE *res2){
    return fputs(res1,res2);
}

int nanosleep$UNIX2003(int val){
    return usleep(val);
}

char* strerror$UNIX2003(int errornum){
    return strerror(errornum);
}

double strtod$UNIX2003(const char *nptr, char **endptr){
    return strtod(nptr, endptr);
}

size_t fwrite$UNIX2003( const void *a, size_t b, size_t c, FILE *d )
{
    return fwrite(a, b, c, d);
}

DIR * opendir$INODE64( char * dirName )
{
    return opendir( dirName );
}

struct dirent * readdir$INODE64( DIR * dir )
{
    return readdir( dir );
}