未定义的引用`mysql_init’
我正在尝试在我的新服务器上编译我的程序,但目前它并不适合我。
错误日志是:
rasmus@web01:~/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。
我错过了什么?
cpulogger.cpp在顶部有#include“cpulogger.h”,然后cpulogger.h有这个:
#include #include #include
编译器不会抱怨缺少mysql / mysql.h,那么该部分必须工作吗?
输出mysql_config:
rasmus@web01:~/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
这是一个新的Ubuntu服务器安装,上面安装了mysql-server。
[解决了]:
将链接库放在编译器命令的末尾可以正常工作。
all: g++ main.cpp logger.cpp cpulogger.cpp -o test `mysql_config --cflags --libs`
请参阅以下答案以获得解释
链接器的参数顺序很重要。 列出需要它的文件后使用mysql-config。 链接器将看到cpulogger.o需要mysql_init并查看其后面列出的库中的符号。 如果先前在参数中列出了库,则不会再次搜索它们。