Ошибки при попытке связать MySQL с проектом

Я не уверен, должен ли я разделить это на две должности … если так, дайте мне знать для дальнейшего использования. Пока что есть проблемы как со статическим, так и с динамическим связыванием, и я выделю заметный текст, чтобы разделить их.

Я посмотрел повсюду и нашел много решений как здесь, так и в других местах, которые, кажется, решают проблемы для других … но ни одно из этих решений не помогло мне.

Раньше я загружал Boost, и он, похоже, не был с библиотекой — и make ничего не делает с каталогом, в котором он находится (не фанат Terminal, но мне пришлось ./configure && make, make а также make install несколько вещей в последнее время; Boost, похоже, ничего не делает с этим).

Я уже использую SDL и мою собственную статическую библиотеку. Разумеется, MySQL Connector / C ++ тоже не требует. Это, однако, требует Boost.

Первоначально я пытался статически связать библиотеку MySQL, но это ужасно провалилось, дав мне длинный список ошибок (109, если быть точным — все компоновщики). Я бы предпочел статические ссылки, если это возможно, поэтому я перечислю некоторые ошибки здесь:

"std::istream::gcount() const", referenced from:
sql::mysql::LongDataSender::operator()(std::istream*) const in libMySQL.a(mysql_prepared_statement.cpp.o)
"std::string::find_last_of(char, unsigned long) const", referenced from:
sql::mysql::parseUri(sql::SQLString const&, sql::mysql::MySQL_Uri&) in libMySQL.a(mysql_uri.cpp.o)
"std::string::find_first_of(char, unsigned long) const", referenced from:
sql::mysql::MySQL_ConnectionMetaData::getTablePrivileges(sql::SQLString const&, sql::SQLString const&, sql::SQLString const&) in libMySQL.a(mysql_metadata.cpp.o)
"std::string::find(std::string const&, unsigned long) const", referenced from:
sql::mysql::MySQL_ConnectionMetaData::getColumnPrivileges(sql::SQLString const&, sql::SQLString const&, sql::SQLString const&, sql::SQLString const&) in libMySQL.a(mysql_metadata.cpp.o)
sql::mysql::MySQL_ConnectionMetaData::getIdentifierQuoteString() in libMySQL.a(mysql_metadata.cpp.o)
...
sql::SQLString, boost::detail::variant::void_, boost::detail::variant::void_,
boost::detail::variant::void_, boost::detail::variant::void_,
boost::detail::variant::void_, boost::detail::variant::void_,
boost::detail::variant::void_, boost::detail::variant::void_,
boost::detail::variant::void_, boost::detail::variant::void_,
boost::detail::variant::void_, boost::detail::variant::void_,
boost::detail::variant::void_, boost::detail::variant::void_,
boost::detail::variant::void_, boost::detail::variant::void_>, std::less<sql::SQLString>,
std::allocator<std::pair<sql::SQLString const, boost::variant<int, double, bool,
sql::SQLString, boost::detail::variant::void_, boost::detail::variant::void_,
boost::detail::variant::void_, boost::detail::variant::void_,
boost::detail::variant::void_, boost::detail::variant::void_,
boost::detail::variant::void_, boost::detail::variant::void_,
boost::detail::variant::void_, boost::detail::variant::void_,
boost::detail::variant::void_, boost::detail::variant::void_,
boost::detail::variant::void_, boost::detail::variant::void_,
boost::detail::variant::void_, boost::detail::variant::void_> > > >&) in
libMySQL.a(mysql_connection.cpp.o)
...

Для статического связывания некоторые из решений, которые я читал, включали мысли о … возможно, библиотека не связана. Одно решение рекомендовало связать с libstdc ++. Это были в основном два наиболее востребованных решения, но я определенно связал библиотеку, и libstdc ++ не повлиял на ошибки вообще.

Итак, когда после почти девяти часов попыток избавиться от ошибок статической ссылки, я решил перейти к динамической библиотеке … все ошибки компоновщика исчезли! Достаточно контента, я попытался запустить его и …

dyld: Library not loaded: libmysqlcppconn.7.dylib
Referenced from: /.../Example.app/Contents/MacOS/Example
Reason: image not found

… Замечательно. Мой первый инстинкт был: «О, да, мне нужно скопировать его в связку». Поэтому, естественно, я пошел проверить это. Сделал это. Побежал снова. Без изменений. Сегодня я нашел несколько решений: перейдите в каталог Xcode и удалите папку «Производные данные» и попробуйте запустить ее снова. Неудачно. Единственное решение, которое я не пробовал (потому что не думаю, что смогу), это изменение пути установки для dylib.

Когда я искал ответ на вопрос о статической библиотеке, один человек упомянул, что у коннектора с сайта MySQL была эта проблема, но у (предположительно того же) коннектора с другого сайта не было проблемы. Проблема: ссылка не была дана.

Некоторые часто заявляемые решения, когда эти проблемы возникают:

  • Путь к заголовку не указан в настройках проекта, поэтому методы
    звонил не может быть найден.
  • Закройте Xcode, удалите производные данные в каталоге xCode, откройте проект, соберите.
  • Может быть использовать 32-битную библиотеку в 64-битном проекте или наоборот.
  • Динамическая библиотека не копируется в комплект.
  • Библиотека отсутствует в списке ссылок.
  • Следует очистить, а затем построить.

Теперь … из этого списка я проверил, чтобы все они были правильными, насколько я знаю, как их получить, и, как упоминалось ранее, я уже скачал Boost. Да, я позаботился о том, чтобы пути заголовка и lib были включены в настройки проекта, как и в MySQL.

… У кого-нибудь есть ЛЮБОЕ представление о том, что может быть сделка? Я также запустил новый проект Cocoa и попытался заставить MySQL работать с простым подключением к базе данных и ничем иным, и результаты одинаковы (статический и динамический оба).

Я использую Mountain Lion и Xcode 4.6.2.

2

Решение

Для динамического связывания я думаю, что у вас была та же проблема, что и у меня. Когда я скомпилировал, я указал, что библиотека находится в другой папке

g++ -I /opt/local/include/ -I /opt/local/include/mysql55-connector-cpp/driver/ -I /opt/local/include/mysql55-connector-cpp/cppconn/ -L libs/ -l mysqlcppconn db_layer.cpp

Когда вы на самом деле запускаете файл, вам нужна библиотека libmysqlcppconn.7.dylib (будьте осторожны, чтобы имя было именно таким), чтобы она находилась в одной папке с вашим исполняемым файлом.

3

Другие решения

У меня была та же проблема, которую вы описываете здесь, к сожалению, согласно эта почта, даже если вам удастся его скомпилировать, он не будет правильно связываться, и вам придется скомпилировать его самостоятельно, используя правильные флаги компилятора. Тем не менее, как только вы правильно выполнили исполняемый файл, вы можете использовать инструменты, описанные в эта страница сказать ему, чтобы искать в папке Frameworks для Dyld.

Я желаю вам удачи.

0

По вопросам рекламы [email protected]