2013-04-17 1 views
0

정적 라이브러리를 사용하여 간단한 테스트 프로젝트를 컴파일하려고 할 때 (예 : Foundation, Net 등) 모든 것이 잘 작동하지만 Crypto 라이브러리를 포함하면로드가 발생합니다. 오류의 원인은 openssl 종속성 때문일 수 있습니까? I에는 OpenSSL이 폴더 및 마시고 재단, 인터넷, 암호화뿐만 아니라 엑스 코드Poco C++ Crypto 정적 라이브러리 사용시 Xcode 빌드시 오류가 발생합니다.

의 빌드 설정에 기초, 인터넷, 암호화에 대한 운영자와 파일을 포함 추가 한 코드 :

//ViewController.h 
#include <Poco/Crypto/CipherFactory.h> 
#include <Poco/Crypto/Cipher.h> 
#include <Poco/Crypto/CipherKey.h> 

에서 내 viewDidLoad에 :

//ViewController.mm 
std::string headKey = "TESTSTRING"; 

// encode the string 
CipherFactory& factory = CipherFactory::defaultFactory(); 
// Creates a 256-bit AES cipher 
Cipher* pCipher = factory.createCipher(CipherKey("aes-256")); 
std::string encrypted = pCipher->encryptString(headKey, Cipher::ENC_BASE64); 
std::string decrypted = pCipher->decryptString(encrypted, Cipher::ENC_BASE64); 
NSLog([NSString stringWithUTF8String:encrypted.c_str()]); 

오류 메시지 :

"_BIO_ctrl", referenced from: 

    "_BIO_free", referenced from: 

    "_BIO_new", referenced from: 

    "_BIO_new_mem_buf", referenced from: 

    "_BIO_s_file", referenced from: 

    "_BIO_s_mem", referenced from: 

    "_BN_bn2bin", referenced from: 

    "_BN_free", referenced from: 

    "_BN_new", referenced from: 

    "_BN_num_bits", referenced from: 

    "_BN_set_word", referenced from: 

    "_CRYPTO_num_locks", referenced from: 

    "_CRYPTO_set_dynlock_create_callback", referenced from: 

    "_CRYPTO_set_dynlock_destroy_callback", referenced from: 

    "_CRYPTO_set_dynlock_lock_callback", referenced from: 

    "_CRYPTO_set_id_callback", referenced from: 

    "_CRYPTO_set_locking_callback", referenced from: 

    "_ERR_error_string", referenced from: 

    "_ERR_free_strings", referenced from: 

    "_ERR_get_error", referenced from: 

    "_EVP_BytesToKey", referenced from: 

    "_EVP_CIPHER_CTX_block_size", referenced from: 

    "_EVP_CIPHER_CTX_cleanup", referenced from: 

    "_EVP_CIPHER_CTX_set_padding", referenced from: 

    "_EVP_CIPHER_block_size", referenced from: 

    "_EVP_CIPHER_flags", referenced from: 

    "_EVP_CIPHER_iv_length", referenced from: 

    "_EVP_CIPHER_key_length", referenced from: 

    "_EVP_CipherFinal_ex", referenced from: 

    "_EVP_CipherInit", referenced from: 

    "_EVP_CipherUpdate", referenced from: 

    "_EVP_PKEY_get1_RSA", referenced from: 

    "_EVP_cleanup", referenced from: 

    "_EVP_des_ede3_cbc", referenced from: 

    "_EVP_get_cipherbyname", referenced from: 

    "_EVP_md5", referenced from: 

    "_OPENSSL_add_all_algorithms_noconf", referenced from: 

    "_OPENSSL_config", referenced from: 

    "_PEM_read_bio_RSAPrivateKey", referenced from: 

    "_PEM_read_bio_RSAPublicKey", referenced from: 

    "_PEM_read_bio_RSA_PUBKEY", referenced from: 

    "_PEM_write_bio_RSAPrivateKey", referenced from: 

    "_PEM_write_bio_RSAPublicKey", referenced from: 

    "_RAND_seed", referenced from: 

    "_RSA_free", referenced from: 

    "_RSA_generate_key_ex", referenced from: 

    "_RSA_new", referenced from: 

    "_RSA_private_decrypt", referenced from: 

    "_RSA_public_encrypt", referenced from: 

    "_RSA_size", referenced from: 

    "_SSL_library_init", referenced from: 

    "_SSL_load_error_strings", referenced from: 

    "_X509_get_pubkey", referenced from: 

    "Poco::Crypto::CipherKey::CipherKey(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)", referenced from: 

    "std::istream::gcount() const", referenced from: 

    "std::string::at(unsigned long) const", referenced from: 

    "std::string::data() const", referenced from: 

    "std::string::size() const", referenced from: 

    "std::string::c_str() const", referenced from: 

    "std::string::empty() const", referenced from: 

    "std::string::length() const", referenced from: 

    "std::string::operator[](unsigned long) const", referenced from: 

    "std::basic_streambuf<char, std::char_traits<char> >::gptr() const", referenced from: 

    "std::basic_streambuf<char, std::char_traits<char> >::pptr() const", referenced from: 

    "std::basic_streambuf<char, std::char_traits<char> >::eback() const", referenced from: 

    "std::basic_streambuf<char, std::char_traits<char> >::egptr() const", referenced from: 

    "std::basic_streambuf<char, std::char_traits<char> >::pbase() const", referenced from: 

    "std::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >::str() const", referenced from: 

    "std::basic_ios<char, std::char_traits<char> >::good() const", referenced from: 

    "std::basic_ios<char, std::char_traits<char> >::rdbuf() const", referenced from: 

    "std::basic_ios<char, std::char_traits<char> >::operator void*() const", referenced from: 

    "std::allocator<char>::std::allocator()", referenced from: 

    "std::allocator<char>::~std::allocator()", referenced from: 

    "std::istream::get(char&)", referenced from: 

    "std::istream::get()", referenced from: 

    "std::istream::read(char*, int)", referenced from: 

    "std::istream::std::istream(std::basic_streambuf<char, std::char_traits<char> >*)", referenced from: 

    "std::istream::~std::istream()", referenced from: 

    "std::ostream::put(char)", referenced from: 

    "std::ostream::write(char const*, int)", referenced from: 

    "std::ostream::std::ostream(std::basic_streambuf<char, std::char_traits<char> >*)", referenced from: 

    "std::ostream::~std::ostream()", referenced from: 

    "std::ostream::operator<<(int)", referenced from: 

    "std::string::append(char const*)", referenced from: 

    "std::string::append(char const*, unsigned long)", referenced from: 

    "std::string::append(std::string const&)", referenced from: 

    "std::string::reserve(unsigned long)", referenced from: 

    "std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&)", referenced from: 

    "std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::string const&)", referenced from: 

    "std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string()", referenced from: 

    "std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()", referenced from: 

    "std::string::operator=(std::string const&)", referenced from: 

    "std::string::operator+=(char)", referenced from: 

    "std::basic_streambuf<char, std::char_traits<char> >::setg(char*, char*, char*)", referenced from: 

    "std::basic_streambuf<char, std::char_traits<char> >::setp(char*, char*)", referenced from: 

    "std::basic_streambuf<char, std::char_traits<char> >::sync()", referenced from: 

    "std::basic_streambuf<char, std::char_traits<char> >::imbue(std::locale const&)", referenced from: 

    "std::basic_streambuf<char, std::char_traits<char> >::pbump(int)", referenced from: 

    "std::basic_streambuf<char, std::char_traits<char> >::sputc(char)", referenced from: 

    "std::basic_streambuf<char, std::char_traits<char> >::uflow()", referenced from: 

    "std::basic_streambuf<char, std::char_traits<char> >::sbumpc()", referenced from: 

    "std::basic_streambuf<char, std::char_traits<char> >::setbuf(char*, int)", referenced from: 

    "std::basic_streambuf<char, std::char_traits<char> >::xsgetn(char*, int)", referenced from: 

    "std::basic_streambuf<char, std::char_traits<char> >::xsputn(char const*, int)", referenced from: 

    "std::basic_streambuf<char, std::char_traits<char> >::pubsync()", referenced from: 

    "std::basic_streambuf<char, std::char_traits<char> >::seekoff(long long, std::_Ios_Seekdir, std::_Ios_Openmode)", referenced from: 

    "std::basic_streambuf<char, std::char_traits<char> >::seekpos(std::fpos<__mbstate_t>, std::_Ios_Openmode)", referenced from: 

    "std::basic_streambuf<char, std::char_traits<char> >::pbackfail(int)", referenced from: 

    "std::basic_streambuf<char, std::char_traits<char> >::showmanyc()", referenced from: 

    "std::basic_streambuf<char, std::char_traits<char> >::basic_streambuf()", referenced from: 

    "std::basic_streambuf<char, std::char_traits<char> >::~basic_streambuf()", referenced from: 

    "std::basic_istringstream<char, std::char_traits<char>, std::allocator<char> >::basic_istringstream(std::string const&, std::_Ios_Openmode)", referenced from: 

    "std::basic_istringstream<char, std::char_traits<char>, std::allocator<char> >::~basic_istringstream()", referenced from: 

    "std::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >::basic_ostringstream(std::_Ios_Openmode)", referenced from: 

    "std::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >::~basic_ostringstream()", referenced from: 

    "std::ios_base::Init::Init()", referenced from: 

    "std::ios_base::Init::~Init()", referenced from: 

    "std::basic_ios<char, std::char_traits<char> >::init(std::basic_streambuf<char, std::char_traits<char> >*)", referenced from: 

    "std::basic_ios<char, std::char_traits<char> >::basic_ios()", referenced from: 

    "std::basic_ios<char, std::char_traits<char> >::~basic_ios()", referenced from: 

    "std::_Rb_tree_decrement(std::_Rb_tree_node_base*)", referenced from: 

    "std::_Rb_tree_increment(std::_Rb_tree_node_base*)", referenced from: 

    "std::__throw_length_error(char const*)", referenced from: 

    "std::_Rb_tree_insert_and_rebalance(bool, std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::_Rb_tree_node_base&)", referenced from: 

    "std::basic_ostream<char, std::char_traits<char> >& std::operator<<<std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)", referenced from: 

    "std::basic_ostream<char, std::char_traits<char> >& std::operator<<<std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char)", referenced from: 

    "typeinfo for std::istream", referenced from: 

    "typeinfo for std::ostream", referenced from: 

    "typeinfo for std::basic_streambuf<char, std::char_traits<char> >", referenced from: 

    "typeinfo for std::basic_ios<char, std::char_traits<char> >", referenced from: 

    "non-virtual thunk to std::istream::~std::istream()", referenced from: 

    "non-virtual thunk to std::ostream::~std::ostream()", referenced from: 

clang: error: linker command failed with exit code 1 (use -v to see invocation) 
+1

pcbabu의 답변을 수락 했으므로 iOS 용으로 제작 한 것 같습니다. 이 경우 [openssl-1.0.1e-ios] (https://github.com/noloader/openssl-1.0.1e-ios)에서 iOS 용으로 미리 작성된 다중 링크 OpenSSL 라이브러리를 얻을 수 있습니다. ARMv7, ARMv7s, ARM64 및 i386 시뮬레이터의 네 가지 아키텍처가 있습니다. – jww

답변

1

문제가 실제로 코드 내에 있지 . 정확히 동일한 플랫폼에서 빌드 된 libcrypto.a 또는 libssl.a을 사용해야합니다. 특히 iOS 시뮬레이터를 사용하는 경우 장치의 경우 i386 또는 arm6 or arm7이됩니다. 따라서 플랫폼 별 라이브러리가 있어야합니다. 이 라이브러리 코드를 웹 사이트에서 가져 와서 같은 아키텍처로 컴파일하거나 여러 플랫폼에 적합한 뚱뚱한 라이브러리를 만들 수 있습니다.

+0

이 명령에서 필요한 빌드가 구성되었는지 확인하십시오. ./configure --config = iPhoneSimulator --no-samples --no-tests --omit = CppParser, CodeGeneration, Remoting/RemoteGen, NetSSL_OpenSSL, Data/ODBC, Data/MySQL --include -path =/Users/exjobb/Downloads/openssl -1.0.1e/include –

+0

명령 행에서 할 수 있습니다. 이 [link] (http://x2on.de/2010/07/13/tutorial-iphone-app-with-compiled-openssl-1-0-0a-library/)를 따르십시오. 링크로 구성 명령이 정상인지 확인하십시오. – pcbabu