Я работаю над CocoaPod, который зависит от двух других стручков, которые я также написал.Допустим, Pod1, Pod2 и Pod3.Pod2 и Pod3 имеют это в своих подспецификациях:
...
s.libraries 'sqlite3'
...
... это потому, что они оба используют разные статические библиотеки, которые зависят от sqlite.Эта строка добавляет sqlite3 в качестве связанной библиотеки («Связанные фреймворки и библиотеки» на этапах сборки) при компиляции их соответствующих cocoapod.Затем Pod1 имеет оба этих модуля как зависимости:
...
s.dependency 'Pod2'
s.dependency 'Pod3'
...
Когда я пытаюсь скомпилировать Pod1, выдается эта ошибка:
Undefined symbols for architecture x86_64:
"_sqlite3_open", referenced from:
DatabaseConnection::open() in libSecurIDLib.a(databaseconnection.o)
"_sqlite3_bind_int", referenced from:
AbstractStatement::bindValue(sqlite3_stmt*, DataValue const&, int) in libSecurIDLib.a(abstractstatement.o)
"_sqlite3_bind_double", referenced from:
AbstractStatement::bindValue(sqlite3_stmt*, DataValue const&, int) in libSecurIDLib.a(abstractstatement.o)
"_sqlite3_bind_text", referenced from:
AbstractStatement::bindValue(sqlite3_stmt*, DataValue const&, int) in libSecurIDLib.a(abstractstatement.o)
"_sqlite3_bind_blob", referenced from:
AbstractStatement::bindValue(sqlite3_stmt*, DataValue const&, int) in libSecurIDLib.a(abstractstatement.o)
"_sqlite3_column_double", referenced from:
AbstractStatement::parseRow(sqlite3_stmt*) in libSecurIDLib.a(abstractstatement.o)
"_sqlite3_bind_null", referenced from:
AbstractStatement::bindValue(sqlite3_stmt*, DataValue const&, int) in libSecurIDLib.a(abstractstatement.o)
"_sqlite3_column_bytes", referenced from:
AbstractStatement::parseRow(sqlite3_stmt*) in libSecurIDLib.a(abstractstatement.o)
"std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::reserve(unsigned long)", referenced from:
KeyValueMapper::extractValue(boost::shared_ptr<KeyValuePair>) in libSecurIDLib.a(keyvaluemapper.o)
"_sqlite3_exec", referenced from:
CreateTableStatement::execute(DatabaseConnection*) in libSecurIDLib.a(createtablestatement.o)
EndTransactionStatement::execute(DatabaseConnection*) in libSecurIDLib.a(endtransactionstatement.o)
BeginTransactionStatement::execute(DatabaseConnection*) in libSecurIDLib.a(begintransactionstatement.o)
"_sqlite3_finalize", referenced from:
AbstractStatement::takeStepsAndFinalize(sqlite3_stmt*) in libSecurIDLib.a(abstractstatement.o)
"std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::append(char const*)", referenced from:
TokenMapper::convertDate(CK_DATE const&) in libSecurIDLib.a(tokenmapper.o)
SqlStrings::generateInsertStatement(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned int) in libSecurIDLib.a(sqlstrings.o)
SqlStrings::generateCreateTableStatement(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, boost::shared_ptr<std::__1::vector<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, DataValue::SQL_DATATYPE>, std::__1::allocator<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, DataValue::SQL_DATATYPE> > > >) in libSecurIDLib.a(sqlstrings.o)
SqlStrings::generateDeleteStatement(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in libSecurIDLib.a(sqlstrings.o)
SqlStrings::generateSelectStatement(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in libSecurIDLib.a(sqlstrings.o)
SqlStrings::generateUpdateStatement(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, boost::shared_ptr<std::__1::vector<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, DataValue>, std::__1::allocator<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, DataValue> > > >) in libSecurIDLib.a(sqlstrings.o)
"vtable for __cxxabiv1::__vmi_class_type_info", referenced from:
typeinfo for RSA::Crypto::BSAFE_Recode in libSecurIDLib.a(BSAFE_Recode.o)
typeinfo for RSA::Crypto::BSAFE_SecretKey in libSecurIDLib.a(BSAFE_CryptoKey.o)
typeinfo for RSA::Crypto::BSAFE_PublicKey in libSecurIDLib.a(BSAFE_CryptoKey.o)
typeinfo for RSA::Crypto::BSAFE_PrivateKey in libSecurIDLib.a(BSAFE_CryptoKey.o)
typeinfo for RSA::Crypto::BSAFE_CryptoHash in libSecurIDLib.a(BSAFE_CryptoHash.o)
typeinfo for RSA::Crypto::BSAFE_SymmetricCipher in libSecurIDLib.a(BSAFE_SymmetricCipher.o)
еще несколько ошибок, которые здесь не подходятиз-за предела слова, а затем заканчивается:
...
"_xmlSchemaCleanupTypes", referenced from:
-[yqKtL17 validateTdpUsingXsd:] in libSecurIDLib.a(TdpProcessor.o)
"___cxa_guard_release", referenced from:
SecLibMesState::instance() in libSecurIDLib.a(SecLibMesState.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Какие у меня варианты?Я попытался опубликовать sqlite3 в отдельном, совместно используемом модуле, но ни одна из обеих библиотек его не взяла