У меня есть библиотека C++, на которую ссылается проект Objective-C++. Библиотека компилируется сама по себе, а проект Objective-C++ компилируется до тех пор, пока я не создам первый класс из библиотеки (используя указатель на объект). Перед использованием класса из моей библиотеки у меня были ссылки на stl string
объекты, которые не вызывали проблем.Ошибки при кросс-компиляции C++/Objective-C++
Я получаю следующие ошибки:
Undefined symbols for architecture i386:
"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:
__verify_callback_c in *************.a(cxx_db.o)
DbEnv::_stream_message_function(__db_env const*, char const*) in *************.a(cxx_env.o)
DbEnv::_stream_error_function(__db_env const*, char const*, char const*) in *************.a(cxx_env.o)
"std::basic_ios<char, std::char_traits<char> >::fail() const", referenced from:
__verify_callback_c in *************.a(cxx_db.o)
"std::ios_base::Init::Init()", referenced from:
__static_initialization_and_destruction_0(int, int) in *************.a(cxx_db.o)
__static_initialization_and_destruction_0(int, int) in *************.a(cxx_dbc.o)
__static_initialization_and_destruction_0(int, int) in *************.a(cxx_dbt.o)
__static_initialization_and_destruction_0(int, int) in *************.a(cxx_env.o)
__static_initialization_and_destruction_0(int, int) in *************.a(cxx_mpool.o)
__static_initialization_and_destruction_0(int, int) in *************.a(cxx_txn.o)
__static_initialization_and_destruction_0(int, int) in *************.a(cxx_lock.o)
...
"std::ios_base::Init::~Init()", referenced from:
___tcf_0 in *************.a(cxx_db.o)
___tcf_0 in *************.a(cxx_dbc.o)
___tcf_0 in *************.a(cxx_dbt.o)
___tcf_0 in *************.a(cxx_env.o)
___tcf_0 in *************.a(cxx_mpool.o)
___tcf_0 in *************.a(cxx_txn.o)
___tcf_0 in *************.a(cxx_lock.o)
...
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
До сих пор я обнаружил, что ошибки, как они могут быть вызваны следующими причинами:
- Имея тип файла ого вместо. мм
- Создание C++ объект в моей Objective-C++ без использования указателя
Я предполагаю, что это сом e вид ошибки кросс-компиляции, но я не знаю, где искать. Идеи о том, что это может быть?
EDIT:
Build Settings:
C++ Standard Library = libc++
C++ Language Dialect = c++0x
Это в моем проекте верхнего уровня. Также используется библиотека, содержащаяся в ней, (она также ссылается на внешнюю библиотеку, а путь заголовка больше не найден при добавлении его в мой основной проект - мне пришлось добавить его в мои основные настройки проекта).
Edit 2: Вот шаг сборки, которая не:
Ld/Users/пользователя/Library/Developer/Xcode/DerivedData/BerkeleyDBHelloWorldSimulator-bgnkrqnronvtkoaongfsdturoklb/Build/Products/Debug-iphonesimulator/BerkeleyDBHelloWorldSimulator. приложение/BerkeleyDBHelloWorldSimulator нормальный i386 кд/Users/пользователя/Документы/Проекты/тесты/BerkeleyDBHelloWorldSimulator SETENV MACOSX_DEPLOYMENT_TARGET 10,6 SetEnv PATH «/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Developer/usr/bin :/usr/bin:/bin:/usr/sbin:/sbin " /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/clang++ -arch i386 -isysroot /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk -L/Пользователи/пользователь/Библиотека/Разработчик/Xcode/DerivedData/BerkeleyDBHelloWorldSimulator-bgnkrqnronvtkoaongfsdturoklb/Build/Products/Debug-iphonesimulator -F/Users/пользователя/Library/Developer/Xcode/DerivedData/BerkeleyDBHelloWorldSimulator-bgnkrqnronvtkoaongfsdturoklb/Build/Продукты/Debug-iphonesimulator -filelist/Пользователи/пользователя /Library/Developer/Xcode/DerivedData/BerkeleyDBHelloWorldSimulator-bgnkrqnronvtkoaongfsdturoklb/Build/Intermediates/BerkeleyDBHelloWorldSimulator.build/Debug-iphonesimulator/BerkeleyDBHelloWorldSimulator.build/Objects-normal/i386/BerkeleyDBHelloWorldSimulator.LinkFileList -mmacosx-версия-10 мин = , 6 -Xlinker -objc_abi_version -Xlinker 2 -stdlib = LibC++ -Xlinker -no_implicit_dylibs -D__IPHONE_OS_VERSION_MIN_REQUIRED = 50000 -lstdC++/Users/пользователя/Library/Developer/Xcode/DerivedData/BerkeleyDBHelloWorldSimulator-bgnkrqnronvtkoaongfsdturoklb/Build/Products/Debug-iphonesimulator/libBerkeleyDB .a -framework UIKit -framework Foundation -framework CoreGraphics -o/Users/пользователь/Библиотека/Разработчик/Xcode/DerivedData/BerkeleyDBHelloWorldSimulator-bgnkrqnronvtkoaongfsdturoklb/Build/Products/Debug-iphonesimulator/BerkeleyDBHelloWorldSimulator.app/BerkeleyDBHelloWorldSimulator
Это не все ошибки, это поможет процитировать их. Они выглядят как ошибки ссылок, а не компилируют ошибки, но вы уверены, что вы связываетесь с стандартной библиотекой C++? (libstdC++. dylib) – pmdj
Единственное, что я урезал, это имя библиотеки. Это статическая библиотека, хотя и не dylib (я компилирую для iOS). – mydogisbox
Должно быть что-то * над * строками, на которые ссылаются ссылки, которые сообщают вам фактическую ошибку. (Я до сих пор подозреваю ошибку связи) Возникает ли ошибка при связывании вашей библиотеки или общего проекта? Связана ли ваша библиотека с libstdC++ или вашим приложением? Или оба? – pmdj