在用Qt开发iOS程序时,使用curl网络库,库依赖和头文件都设置好了编译的时出现
Undefined symbols for architecture arm64:
"_SSLGetNegotiatedProtocolVersion", referenced from:
_darwinssl_connect_step2 in libcurl.a(libcurl_la-darwinssl.o)
"_SecTrustSetAnchorCertificates", referenced from:
_darwinssl_connect_step2 in libcurl.a(libcurl_la-darwinssl.o)
"_SecTrustSetAnchorCertificatesOnly", referenced from:
_darwinssl_connect_step2 in libcurl.a(libcurl_la-darwinssl.o)
"_SSLWrite", referenced from:
_darwinssl_send in libcurl.a(libcurl_la-darwinssl.o)
"_SecTrustEvaluate", referenced from:
_darwinssl_connect_step2 in libcurl.a(libcurl_la-darwinssl.o)
"_SSLHandshake", referenced from:
_darwinssl_connect_step2 in libcurl.a(libcurl_la-darwinssl.o)
"_SSLCopyPeerTrust", referenced from:
_darwinssl_connect_common in libcurl.a(libcurl_la-darwinssl.o)
_darwinssl_connect_step2 in libcurl.a(libcurl_la-darwinssl.o)
"_SecTrustGetCertificateCount", referenced from:
_darwinssl_connect_common in libcurl.a(libcurl_la-darwinssl.o)
"_SecTrustGetCertificateAtIndex", referenced from:
_darwinssl_connect_common in libcurl.a(libcurl_la-darwinssl.o)
"_SSLSetProtocolVersionMax", referenced from:
_darwinssl_connect_common in libcurl.a(libcurl_la-darwinssl.o)
"_kSecClass", referenced from:
_darwinssl_connect_common in libcurl.a(libcurl_la-darwinssl.o)
"_kSecReturnRef", referenced from:
_darwinssl_connect_common in libcurl.a(libcurl_la-darwinssl.o)
"_kSecMatchLimit", referenced from:
_darwinssl_connect_common in libcurl.a(libcurl_la-darwinssl.o)
"_SecItemCopyMatching", referenced from:
_darwinssl_connect_common in libcurl.a(libcurl_la-darwinssl.o)
"_SecCertificateCopySubjectSummary", referenced from:
_darwinssl_connect_common in libcurl.a(libcurl_la-darwinssl.o)
_CopyCertSubject in libcurl.a(libcurl_la-darwinssl.o)
"_SecPKCS12Import", referenced from:
_darwinssl_connect_common in libcurl.a(libcurl_la-darwinssl.o)
"_SSLGetNegotiatedCipher", referenced from:
_darwinssl_connect_step2 in libcurl.a(libcurl_la-darwinssl.o)
"_SSLSetPeerDomainName", referenced from:
_darwinssl_connect_common in libcurl.a(libcurl_la-darwinssl.o)
"_kSecImportItemIdentity", referenced from:
_darwinssl_connect_common in libcurl.a(libcurl_la-darwinssl.o)
"_SSLSetCertificate", referenced from:
_darwinssl_connect_common in libcurl.a(libcurl_la-darwinssl.o)
"_SecIdentityCopyCertificate", referenced from:
_darwinssl_connect_common in libcurl.a(libcurl_la-darwinssl.o)
"_SSLSetEnabledCiphers", referenced from:
_darwinssl_connect_common in libcurl.a(libcurl_la-darwinssl.o)
"_SecPolicyCreateSSL", referenced from:
_darwinssl_connect_common in libcurl.a(libcurl_la-darwinssl.o)
"_SSLGetBufferedReadSize", referenced from:
_Curl_darwinssl_data_pending in libcurl.a(libcurl_la-darwinssl.o)
"_kSecImportExportPassphrase", referenced from:
_darwinssl_connect_common in libcurl.a(libcurl_la-darwinssl.o)
"_SSLCreateContext", referenced from:
_darwinssl_connect_common in libcurl.a(libcurl_la-darwinssl.o)
"_SSLSetSessionOption", referenced from:
_darwinssl_connect_common in libcurl.a(libcurl_la-darwinssl.o)
"_SSLGetNumberSupportedCiphers", referenced from:
_darwinssl_connect_common in libcurl.a(libcurl_la-darwinssl.o)
"_SSLSetProtocolVersionMin", referenced from:
_darwinssl_connect_common in libcurl.a(libcurl_la-darwinssl.o)
"_SSLGetSessionState", referenced from:
_Curl_darwinssl_check_cxn in libcurl.a(libcurl_la-darwinssl.o)
"_kSecMatchLimitAll", referenced from:
_darwinssl_connect_common in libcurl.a(libcurl_la-darwinssl.o)
"_SSLSetPeerID", referenced from:
_darwinssl_connect_common in libcurl.a(libcurl_la-darwinssl.o)
"_kSecAttrLabel", referenced from:
_darwinssl_connect_common in libcurl.a(libcurl_la-darwinssl.o)
"_SecCertificateCreateWithData", referenced from:
_append_cert_to_array in libcurl.a(libcurl_la-darwinssl.o)
"_SSLRead", referenced from:
_darwinssl_recv in libcurl.a(libcurl_la-darwinssl.o)
"_SSLSetIOFuncs", referenced from:
_darwinssl_connect_common in libcurl.a(libcurl_la-darwinssl.o)
"_SSLGetSupportedCiphers", referenced from:
_darwinssl_connect_common in libcurl.a(libcurl_la-darwinssl.o)
"_kSecMatchPolicy", referenced from:
_darwinssl_connect_common in libcurl.a(libcurl_la-darwinssl.o)
"_SSLSetConnection", referenced from:
_darwinssl_connect_common in libcurl.a(libcurl_la-darwinssl.o)
"_kSecClassIdentity", referenced from:
_darwinssl_connect_common in libcurl.a(libcurl_la-darwinssl.o)
"_SSLClose", referenced from:
_Curl_darwinssl_close in libcurl.a(libcurl_la-darwinssl.o)
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
** BUILD FAILED **
检查库的路径都在.pro文件中设置好的,检查libcurl.a的架构
lipo -info libcurl.a
Architectures in the fat file: libcurl.a are: armv7 armv7s x86_64 arm64
支持4种架构的平台:armv7 armv7s x86_64 arm64,那怎么还是没有查找到这个呢
原因是在iOS系统中需要设置Security选项,即在.pro文件中添加
ios{
QMAKE_LFLAGS += -framework Security
}
如果转成xcode的工程,
/Users/xxx/Qt5.12.8/5.12.8/ios/bin/qmake iOSApp.pro -spec macx-xcode
设置如下
-framework
Security
参考:
c++ - What is the darwinssl library location on Mac OS X? - Stack Overflow