Подтвердить что ты не робот

Undefined ссылка на `mysql_init '

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

Журнал ошибок:

[email protected]:~/c++$ make test
g++ `mysql_config --cflags --libs` main.cpp logger.cpp cpulogger.cpp -o test
/tmp/ccPaMZUy.o: In function `CPULogger':
/home/rasmus/c++/cpulogger.cpp:7: undefined reference to `mysql_init'
/home/rasmus/c++/cpulogger.cpp:8: undefined reference to `mysql_real_connect'
/home/rasmus/c++/cpulogger.cpp:10: undefined reference to `mysql_get_client_info'
/tmp/ccPaMZUy.o: In function `~CPULogger':
/home/rasmus/c++/cpulogger.cpp:16: undefined reference to `mysql_close'
collect2: ld returned 1 exit status
make: *** [all] Error 1

Как вы можете видеть, я компилирую против MySQL - я проверил, что mysql.h присутствует в пулах include.

Что мне не хватает?

cpulogger.cpp имеет #include "cpulogger.h" наверху, то cpulogger.h имеет следующее:

#include <iostream>
#include <fstream>
#include <mysql/mysql.h>

Компилятор не жалуется на отсутствие mysql/mysql.h, так что часть должна работать?

Вывод mysql_config:

[email protected]:~/c++$ mysql_config --cflags --libs
-I/usr/include/mysql -DBIG_JOINS=1  -fno-strict-aliasing  -g
-L/usr/lib -lmysqlclient -lpthread -lz -lm -lrt -ldl

Makefile:

all:
    g++ `mysql_config --cflags --libs` main.cpp logger.cpp cpulogger.cpp -o test


test: all
    ./test

Это новая установка сервера unbuntu с установкой mysql-сервера.

[решено]:

Помещение библиотек компоновщика в конце команд компилятора работает.

all:
    g++ main.cpp logger.cpp cpulogger.cpp -o test `mysql_config --cflags --libs`

См. ответ ниже для объяснения.

4b9b3361

Ответ 1

Порядок аргументов для компоновщика значителен. Используйте mysql-config после перечисления необходимых ему файлов. Компилятор увидит, что cpulogger.o нуждается в mysql_init и посмотреть в библиотеках, перечисленных после него для символа. Если библиотеки были указаны ранее в аргументах, они больше не будут выполняться поиск.