使用 g++ 对 MySQL 库的未定义引用
Undefined reference to MySQL libraries using g++
尝试将我的程序与 5.5 服务器提供的 MySQL 库链接时,我收到undefined reference to 'mysql_suchandsuch@#'
消息。安装 MySQL 时,我使用了默认路径,对我来说,在 Windows 上是 C:Program FilesMySQLMySQL Server 5.5
.最初,我以为空格引起了我的悲伤,但我认为我已经正确地解决了如何指向没有空格的图书馆路径(仍然没有运气)。如果有其他可能的原因,请告诉我。
我已经审查了这个网站上的一系列问题,试图解决我的问题......
- 问题1
- 问题2
- 问题3
- 问题4
- 第5项质询
- 第6项质询
- 第7项质询
使用 mingw/g++,我尝试使用以下选项进行链接,基于我自己的研究和此处的建议:
- -L"C:\Program Files\MySQL\MySQL Server 5.5\lib\" -llibmysql.lib
- -L"C:\Program Files\MySQL\MySQL Server 5.5\lib\" -lmysqlclient.lib
- -L"C:\Progra~1\MySQL\MySQLS~1.5\lib\" -llibmysql.lib -
- LC:\Progra~1\MySQL\MySQLS~1.5\lib\ -lmysqlclient.lib
- -L"C:\Progra~1\MySQL\MySQLS~1.5\lib\" -lmysql
在所有情况下,我都将-L
/-l
选项放在语句的最右侧,因为我知道这可能很重要。
我已经确认这些库确实存在。在/lib 目录中,我有 libmysql.lib、mysqlclient.lib 和 libmysql.dll。我没有尝试与.dll链接,因为我审查过的教程/论坛都没有建议这样做。
我没有使用MAKEFILES。
有没有人对g++/MySQL有具体的经验?
我使用 2011 年 11 月的 GCC 4.6.1
:g++ my.cpp -I D:OptMySQL5.5include ^
D:OptMySQL5.5liblibmysql.dll -o myWithDll.exe
g++ my.cpp -I D:OptMySQL5.5include ^
-L D:OptMySQL5.5lib -lmysql -o myWithLib.exe
因此,针对 LIB 和 DLL 的链接都可以工作。
您可能会收到警告(请参阅Gaffi的评论)。这是因为链接器在未指定的情况下为您执行模糊链接;通常,它将无法链接。不过,它很好,让它为你工作,同时警告你没有你要求的事情发生。禁止显示警告的方法是使模糊链接显式化:
g++ -Wl,--enable-stdcall-fixup my.cpp -I D:OptMySQL5.5include ^
D:OptMySQL5.5liblibmysql.dll -o myWithDll.exe
g++ -Wl,--enable-stdcall-fixup my.cpp -I D:OptMySQL5.5include ^
-L D:OptMySQL5.5lib -lmysql -o myWithLib.exe
这是链接器的Cygwin/RedHat/MinGW扩展;文档在这里:
--enable-stdcall-fixup
--disable-stdcall-fixup
如果链接 [er] 找到它无法解析的符号,它将尝试 通过查找另一个不同的定义符号进行"模糊链接" 仅采用符号名称的格式(cdecl vs stdcall)并将 通过链接到匹配项来解析该符号。例如, 未定义的符号_foo可能链接到函数_foo@12,或 未定义的符号_bar@16可能链接到函数_bar。什么时候 链接器这样做,它会打印一个警告,因为它通常应该 链接失败,但有时会导入从 第三方 DLL 可能需要此功能才能使用。如果指定 --启用标准呼叫修复,此功能已完全启用并警告 不打印。如果指定 --disable-stdcall-fixup,则此功能为 禁用,此类不匹配被视为错误。[此选项 特定于链接器的 i386 PE 目标端口]
您是否尝试过-lmysql
链接器自动预置lib
并附加.lib
- 对C宏的未定义引用,但在定义它时会出现重新定义错误
- 编译时的 CImg 库返回对"__imp_SetDIBitsToDevice"的未定义引用
- 对Py_Initialize()的未定义引用
- 使用mysql c++连接器的未定义引用
- 对 Scalar ::Scalar() 的未定义引用
- 对复制 CTOR 和 CTOR 的未定义引用
- 对显式实例化的模板函数的未定义引用
- TensorRT (C++ API) 对"createNvOnnxParser_INTERNAL"的未定义引用
- 2个模板化类的非模板友元函数未定义引用错误
- 编译 libfluid 样本控制器时对"event_base_del_virtual"的未定义引用
- 获取对function_name的未定义引用
- 对 'std::thread::_M_start_thread CMake 的未定义引用进行基准测试
- 对结构方法的未定义引用
- 使用内联函数 c++ 的未定义引用
- 对 CMake 中'cudaRegisterLinkedBinary'链接错误的未定义引用?
- 对 DLOPEN 的未定义引用
- QT C++中对全局变量的未定义引用
- 快速数学导致对"__pow_finite"的未定义引用
- 对 boost::system::d etail::system_category_instance 的未定义引用,从
- OpenCV 3.4.3 中对 'cv::String::d eallocate()' 错误的未定义引用