linux centos c++编译mysql找不到mysql.h

centos系统c++测试mysql,正确安装好mysql客户端后,在编译的时候直接-lmysqlclient的时候一直找不到mysql.h

 

[root@pattern test]# g++ test_mysql.cpp -o main -lmysqlclient
test_mysql.cpp:2:19: fatal error: mysql.h: No such file or directory
 #include 
                   ^
compilation terminated.

但是调用mysql的配置config去连接库就可以成功:

g++ test_mysql.cpp `mysql_config --cflags --libs`  -o main

 

找一下是否有这个库mysqlclient   命令 find / -name libmysqlclient.so

[root]# find / -name libmysqlclient.so
/usr/lib64/mysql/libmysqlclient.so
/usr/local/mysql/lib/libmysqlclient.so

 

或者文件mysql.h        命令find / -name mysql.h

[root]# find / -name mysql.h
/usr/local/mysql/include/mysql.h
/usr/local/mysql/include/mysql/mysql.h

 

没有的话,那就重装一下mysql的客户端 yum install mysql-devel

但是不用这个的话直接-l -I -L库都不行,连到库了但是好像mysql又出问题了

[root@pattern test]# g++ test_mysql.cpp -o main -I/usr/include/mysql
/tmp/ccLv8bO9.o: In function `main':
test_mysql.cpp:(.text+0x23): undefined reference to `mysql_init'
test_mysql.cpp:(.text+0x5e): undefined reference to `mysql_real_connect'
test_mysql.cpp:(.text+0x86): undefined reference to `mysql_query'
test_mysql.cpp:(.text+0xb4): undefined reference to `mysql_close'
collect2: error: ld returned 1 exit status



这里的话,推测就是mysql也需要依赖一些别的库,所以在你只-lmysqlclient的时候或者-I/usr/include/mysql都会报错,

但是你用`mysql_config --cflags --libs`就能成功,所以基本上就可以断定是这个问题了

于是乎:

[root@pattern test]# mysql_config --cflags --libs
-I/usr/include/mysql -g  -m64 -fPIC  -g -fabi-version=2 -fno-omit-frame-pointer -fno-strict-aliasing
-L/usr/lib64/mysql -lmysqlclient -lpthread -lm -ldl

可以看到除了-lmysqlclient 外还有别的库,把这些全部加进去

g++ test_mysql.cpp -I/usr/include/mysql -L/usr/lib64/mysql -lmysqlclient -lpthread -lm -ldl -o main

就能成功了。到此再测试下拿些不需要

最后

g++ test_mysql.cpp -L/usr/lib64/mysql -lmysqlclient   -I/usr/include/mysql -o main

只需要这三个就ok了,但是为啥这三个都需要我也不知道了,求大佬指教,谢谢

你可能感兴趣的:(c++,linux)