Почему простой код mysql ++ компилируется автономно, а не в проекте? - PullRequest
0 голосов
/ 18 августа 2011

Сначала небольшая программа:

#include <mysql++.h>
using namespace mysqlpp;

void mainuu ()
{ Connection conn("mysql", "localhost", "root", "pwd");}

Если я скомпилирую его как один файл в CodeLite или так:

g++ -I/usr/include/mysql -I/usr/include/mysql++ -lmysqlclient -lmysqlpp -o Test mysql_api.cpp

все нормально, но когда я пытаюсь собратьВесь проект с этим файлом, я получаю это:

g++ -o ./Debug/server ./Debug/main.o ./Debug/log.o ./Debug/packet.o ./Debug/mysql_api.o  -L.   
./Debug/mysql_api.o: In function `mainuu()':
/home/asyler/.codelite/workspace/test/server/mysql_api.cpp:10: undefined reference to `mysqlpp::Connection::Connection(char const*, char const*, char const*, char const*, unsigned int)'
/home/asyler/.codelite/workspace/test/server/mysql_api.cpp:12: undefined reference to `mysqlpp::Connection::query(char const*)'
/home/asyler/.codelite/workspace/test/server/mysql_api.cpp:13: undefined reference to `mysqlpp::SQLTypeAdapter::SQLTypeAdapter(char const*, bool)'
/home/asyler/.codelite/workspace/test/server/mysql_api.cpp:13: undefined reference to `mysqlpp::operator<<(mysqlpp::quote_type1, mysqlpp::SQLTypeAdapter const&)'
/home/asyler/.codelite/workspace/test/server/mysql_api.cpp:19: undefined reference to `mysqlpp::operator<<(std::basic_ostream<char, std::char_traits<char> >&, mysqlpp::String const&)'
/home/asyler/.codelite/workspace/test/server/mysql_api.cpp:10: undefined reference to `mysqlpp::Connection::~Connection()'
/home/asyler/.codelite/workspace/test/server/mysql_api.cpp:10: undefined reference to `mysqlpp::Connection::~Connection()'
./Debug/mysql_api.o: In function `mysqlpp::Row::operator[](int) const':
/usr/include/mysql++/row.h:328: undefined reference to `mysqlpp::Row::at(unsigned int) const'
./Debug/mysql_api.o: In function `mysqlpp::Query::store()':
/usr/include/mysql++/query.h:467: undefined reference to `mysqlpp::Query::str(mysqlpp::SQLQueryParms&)'
/usr/include/mysql++/query.h:467: undefined reference to `mysqlpp::SQLTypeAdapter::SQLTypeAdapter(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool)'
/usr/include/mysql++/query.h:467: undefined reference to `mysqlpp::Query::store(mysqlpp::SQLTypeAdapter const&)'
collect2: ld returned 1 exit status
make[1]: *** [Debug/server] Error 1
make[1]: Leaving directory `/home/asyler/.codelite/workspace/test/server'
make: *** [All] Error 2

Вот настройки компилятора CodeLite g ++:

-g -I/usr/include/mysql -I/usr/include/mysql++ -lmysqlclient -lmysqlpp -L/usr/lib/mysql -L/usr/lib/mysql++ -lmysql++

Ответы [ 2 ]

1 голос
/ 18 августа 2011

Похоже, вам нужно отредактировать настройки проекта CodeLite и добавить эти настройки -lmysqlclient -lmysqlpp, которые вы передаете в командной строке. Заполните Путь к библиотеке и Библиотеки поля в Компоновщик вкладка .

1 голос
/ 18 августа 2011

Это компоновщик ошибок.

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

Итак, передайте -lmysqlclient -lmysqlpp на g++ и на этот раз.

Если вы используете интегрированную среду разработки, настройте параметры сборки проекта соответствующим образом. В частности, я вижу, что CodeLite имеет настройки компиляции "Compiler" и "Linker" . Вам нужны настройки "Linker".

Для получения дополнительной информации о процессе сборки (т. Е. Компиляции, компоновке и разнице) прочитайте хорошую книгу по C ++.

...