应用程序无法链接到mysql库(可在CentOS处)
app failing to link to mysql libraries (CentOS)
链接步骤为我的所有mysql调用获取未定义的引用:
~/private/WDI/git$ make
c++ -L/usr/lib/x86_64-linux-gnu -lmysqlclient -lpthread -lz -lm -lrt -ldl -o tom tom.o Block.o IPC.o ConnectMxctl.o CI_Metadata.o Log.o
tom.o: In function `connect_to_table_managers()':
/home/chap/private/WDI/git/tom.cpp:128: undefined reference to `mysql_num_rows'
/home/chap/private/WDI/git/tom.cpp:132: undefined reference to `mysql_num_fields'
/home/chap/private/WDI/git/tom.cpp:133: undefined reference to `mysql_fetch_row'
/home/chap/private/WDI/git/tom.cpp:153: undefined reference to `mysql_num_rows'
/home/chap/private/WDI/git/tom.cpp:157: undefined reference to `mysql_fetch_row'
/home/chap/private/WDI/git/tom.cpp:167: undefined reference to `mysql_free_result'
c++命令中的链接库是由mysql_config --libs
生成的。以下是目录的部分列表:
/usr/lib/x86_64-linux-gnu$ ll libmysql*
-rw-r--r-- 1 root root 4838468 Jul 23 23:28 libmysqlclient.a
lrwxrwxrwx 1 root root 16 Jul 23 23:28 libmysqlclient_r.a -> libmysqlclient.a
lrwxrwxrwx 1 root root 17 Jul 23 23:28 libmysqlclient_r.so -> libmysqlclient.so
lrwxrwxrwx 1 root root 20 Jul 23 23:28 libmysqlclient_r.so.18 -> libmysqlclient.so.18
lrwxrwxrwx 1 root root 24 Jul 23 23:28 libmysqlclient_r.so.18.0.0 -> libmysqlclient.so.18.0.0
lrwxrwxrwx 1 root root 20 Jul 23 23:28 libmysqlclient.so -> libmysqlclient.so.18
lrwxrwxrwx 1 root root 24 Jul 23 23:28 libmysqlclient.so.18 -> libmysqlclient.so.18.0.0
-rw-r--r-- 1 root root 3408144 Jul 23 23:28 libmysqlclient.so.18.0.0
因此,的事物看起来在其适当的位置。为什么这些符号是不可解的?
您应该将最独立的库放在命令的末尾,这样编译器就可以正确地找到符号和定义:
c++ -L/usr/lib/x86_64-linux-gnu -o tom tom.o Block.o IPC.o
ConnectMxctl.o CI_Metadata.o Log.o
-lmysqlclient -lpthread -lz -lm -lrt -ldl
通过这种方式,编译器将继续从下一个链接文件中搜索未定义的符号。例如,如果IPO.o
使用了CI_Metadata.o
中定义的符号(类型/类/结构/函数等),编译器可以找到它,因为您将CI_Metadata.o
放在IPO.o
之后。大多数库都是独立的,这就是为什么它们处于编译/链接命令的末尾。
相关文章:
- yum :在 CentOS 上使用 Boost 1.69 而不是默认 (1.53) 版本
- 未定义的符号 - 在 CentOS 7 中使用 log4cxx
- 在 CentOS 上安装 tcmalloc
- 在 centos 7 上编译 Qt 5.11.1 中的错误
- 一个32位版本的应用程序,建立在CentOS 6 x64上,当在较新的Linux上启动时,在"dl_itera
- QDoubleSpinBox,可在值和显示之间进行缩放
- MySQL 连接器 CPP 在 CentOS 6 中未定义的引用
- 在CentOS 7上安装GCC 7.4.0不会更新我的LIBSTDC 版本
- QT在CentOS 7的openGL不起作用
- /usr/bin/ld:在CentOS 7中找不到-lclapack
- 在 CentOS 7 上通过 devtoolset-4 安装的 Eclipse CDT 使用了错误版本的 gcc/g++
- 是否有OpenCL 2.2功能,可在OpenCL C 中使用,但在OpenclC中不可用
- 在 Centos 7 上交叉编译 protobuf 2.5.0 for Android
- 在CentOS 7上从源代码构建TileServer GL
- 如何配置Qt Creator在centos 6.7上使用RH的devtoolset-2
- Tensorflow 1.6.0带CUDA支持在CentOS 6.10 C++上链接libtensorflow(_cc)
- Axpection_ptr在All Handler中的奇特在CentOS 7和Windows上都奇怪地工作
- C 功能具有3个参数,可在通用二进制输入中读取
- 在CentOS 7 x64上编译QT时,如何解决矛盾的库问题
- 应用程序无法链接到mysql库(可在CentOS处)