C++ MySQL++ 未定义对 dlclose 的引用

Posted

技术标签:

【中文标题】C++ MySQL++ 未定义对 dlclose 的引用【英文标题】:C++ MySQL++ undefined reference to dlclose 【发布时间】:2013-09-17 19:56:26 【问题描述】:

所以我在使用 GCC 的 Ubuntu 12.04 LTS x64 下使用 mysql++ 编译程序时收到此错误。详细其:

/usr/lib/i386-linux-gnu/libmysqlclient.a(client_plugin.c.o): In function add_plugin:
(.text+0x253): undefined reference to dlclose
/usr/lib/i386-linux-gnu/libmysqlclient.a(client_plugin.c.o): In function mysql_client_plugin_deinit:
(.text+0x2c7): undefined reference to dlclose
/usr/lib/i386-linux-gnu/libmysqlclient.a(client_plugin.c.o): In function mysql_load_plugin_v:
(.text+0x524): undefined reference to dlopen
/usr/lib/i386-linux-gnu/libmysqlclient.a(client_plugin.c.o): In function mysql_load_plugin_v:
(.text+0x54a): undefined reference to dlsym
/usr/lib/i386-linux-gnu/libmysqlclient.a(client_plugin.c.o): In function mysql_load_plugin_v:
(.text+0x67f): undefined reference to dlerror
/usr/lib/i386-linux-gnu/libmysqlclient.a(client_plugin.c.o): In function mysql_load_plugin_v:
(.text+0x695): undefined reference to dlclose

我已经安装了:libmysql++-3、libmysqlclient18 和 libmysqlclient18-dev、libdml3 和 libdml3-dev 库按以下顺序链接:

/usr/lib/libmysqlpp.a
/usr/lib/i386-linux-gnu/libdl.a
/usr/lib/i386-linux-gnu/libmysqlclient.a

作为链接器,我拥有以下目录:

/usr/lib
/usr/lib/i386-linux-gnu

【问题讨论】:

听起来你应该只在-lmysqlclient之后-ldl... 【参考方案1】:

将评论变成答案。以免丢失:

您必须在-lmysqlclient 之后才链接-ldl。链接顺序很重要。

【讨论】:

当我在一个完全不相关的项目中遇到同样的错误时,这很有帮助。而且我不知道自己在做什么,在我猜测是依赖对象之后我移动了dl,它解决了我的问题!谢谢。

以上是关于C++ MySQL++ 未定义对 dlclose 的引用的主要内容,如果未能解决你的问题,请参考以下文章

dlclose() 后访问共享库分配的内存

Linux C++ libdl.so dlfcn.h使用方法(dlopen()dlsym()dlclose()dlerror())(用于动态链接库操作)(懒加载立即加载)共享库符号动态库

qt:对“mysql_something@nr”的未定义引用

C++ 错误:未定义对“main”的引用

c++中对静态变量的未定义引用

c++ 继承问题:未定义对“vtable”的引用