clang:错误:链接器命令失败,退出代码1仅出现在设备上

时间:2015-09-30 05:59:31

标签: ios xcode linker linker-errors xcode7

当我试图在设备上测试我的应用时,我得到以下错误。错误不会出现在模拟器中。我使用xcode 7.有人可以帮忙吗?

  

架构armv7的未定义符号:" _PKCS5_PBKDF2_HMAC_SHA1",   引自:         _sqlcipher_cipher_ctx_key_derive在sqlcipher.a(sqlite3.o)" _HMAC_CTX_init",引自:         sqlcipher.a中的_sqlcipher_page_hmac(sqlite3.o)" _HMAC_Init_ex",引自:         sqlcipher.a(sqlite3.o)中的_sqlcipher_page_hmac" _HMAC_Final",引自:         sqlcipher.a中的_sqlcipher_page_hmac(sqlite3.o)" _HMAC_CTX_cleanup",引自:         sqlcipher.a中的_sqlcipher_page_hmac(sqlite3.o)" _RAND_bytes",引自:         sqlcipher.a中的_sqlcipher_page_cipher(sqlite3.o)         sqlcipher.a中的_sqlcipher_codec_ctx_init(sqlite3.o)" _HMAC_Update",引自:         sqlcipher.a中的_sqlcipher_page_hmac(sqlite3.o)" _EVP_CIPHER_CTX_set_padding",引自:         sqlcipher.a中的_sqlcipher_page_cipher(sqlite3.o)" _EVP_CipherInit",引自:         sqlcipher.a中的_sqlcipher_page_cipher(sqlite3.o)" _EVP_CipherFinal",引自:         sqlcipher.a中的_sqlcipher_page_cipher(sqlite3.o)" _EVP_get_cipherbyname",引自:         sqlcipher.a中的_sqlcipher_codec_ctx_set_cipher(sqlite3.o)         sqlcipher.a中的_sqlcipher_activate(sqlite3.o)" _OPENSSL_add_all_algorithms_noconf",引自:         sqlcipher.a中的_sqlcipher_activate(sqlite3.o)" _EVP_MD_size",引自:         sqlcipher.a中的_sqlcipher_codec_ctx_set_cipher(sqlite3.o)" _EVP_sha1",引自:         sqlcipher.a中的_sqlcipher_codec_ctx_set_cipher(sqlite3.o)         sqlcipher.a中的_sqlcipher_page_hmac(sqlite3.o)" _EVP_CIPHER_key_length",引自:         sqlcipher.a中的_sqlcipher_codec_ctx_set_cipher(sqlite3.o)" _EVP_CipherUpdate",引自:         sqlcipher.a中的_sqlcipher_page_cipher(sqlite3.o)" _EVP_CIPHER_iv_length",引自:         sqlcipher.a中的_sqlcipher_codec_ctx_set_cipher(sqlite3.o)" _EVP_CIPHER_CTX_cleanup",引自:         sqlcipher.a中的_sqlcipher_page_cipher(sqlite3.o)" _EVP_CIPHER_block_size",引自:         sqlcipher.a中的_sqlcipher_codec_ctx_set_cipher(sqlite3.o)ld:找不到架构armv7 clang的符号:错误:链接器   命令失败,退出代码为1(使用-v查看调用)

2 个答案:

答案 0 :(得分:0)

"架构armv7的未定义符号的常见原因"是:

  1. 您导入标题但不链接正确的库。这很常见,特别是对于像QuartzCore这样的库的头文件,因为默认情况下它不包含在项目中。要解决:

    • 在Build Phases的Link Binary With Libraries部分添加正确的库。

    • 如果要在默认搜索路径之外添加库,可以在构建设置的库搜索路径值中包含路径,并添加-l{library_name_without_lib_and_suffix}(例如,对于libz.a使用 - lz)到Build Settings的Other Linker Flags部分。

  2. 您将文件复制到项目中但忘记检查要添加文件的目标。要解决:

    • 打开正确目标的构建阶段,展开编译源并添加缺少的.m文件。
  3. 您包含一个为另一个体系结构构建的静态库,例如主机上的模拟器i386。要解决:

    如果您的库供应商有多个库文件要包含在项目中,您需要包含一个用于模拟器(i386)和一个用于设备(​​例如armv7)。

答案 1 :(得分:0)

这些是OpenSSL符号,因此您可能没有链接到libcrypto。将-lcrypto添加到链接器标志。