6

undefined reference to 'mysql_suchandsuch@#'在尝试将我的程序与 5.5 服务器提供的 MySQL 库链接时收到消息。安装 MySQL 时,我使用默认路径,在 Windows 上对我来说是C:\Program Files\MySQL\MySQL Server 5.5\. 最初,我认为空格会引起我的悲伤,但我认为我已经正确地找出了如何指向没有空格的库路径(仍然没有运气)。如果还有其他可能的原因,请告诉我。

我已经查看了此站点上的一系列问题,试图解决我的问题...

使用 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 有特定的经验?

4

2 回答 2

1

从 2011 年 11 月开始,使用 GCC 4.6.1 的以下命令对我来说可以正常工作:

g++ my.cpp -I D:\Opt\MySQL5.5\include ^
  D:\Opt\MySQL5.5\lib\libmysql.dll -o myWithDll.exe

g++ my.cpp -I D:\Opt\MySQL5.5\include ^
  -L D:\Opt\MySQL5.5\lib -lmysql -o myWithLib.exe

所以链接到 LIB 和 DLL 都可以工作。

您可能会收到警告(请参阅 Gaffi 的评论)。这是因为链接器在您没有指定它的情况下为您进行模糊链接;通常,它会无法链接。不过,它很好,让它为你工作,同时警告你在你没有请求的情况下发生的事情。抑制警告的方法是使模糊链接显式:

g++ -Wl,--enable-stdcall-fixup my.cpp -I D:\Opt\MySQL5.5\include ^
  D:\Opt\MySQL5.5\lib\libmysql.dll -o myWithDll.exe

g++ -Wl,--enable-stdcall-fixup my.cpp -I D:\Opt\MySQL5.5\include ^
  -L D:\Opt\MySQL5.5\lib -lmysql -o myWithLib.exe

这是链接器的 Cygwin/RedHat/MinGW 扩展;文档在这里

--enable-stdcall-fixup
--disable-stdcall-fixup

如果链接[er] 找到一个它无法解析的符号,它将尝试通过查找另一个仅在符号名称格式(cdecl 与 stdcall)上不同的已定义符号来执行“模糊链接”,并将通过以下方式解析该符号链接到比赛。例如,未定义的符号_foo 可能链接到函数_foo@12,或者未定义的符号_bar@16 可能链接到函数_bar。当链接器执行此操作时,它会打印一条警告,因为它通常应该无法链接,但有时从第三方 dll 生成的导入库可能需要此功能才能使用。如果您指定 --enable-stdcall-fixup,此功能将完全启用并且不会打印警告。如果您指定 --disable-stdcall-fixup,则禁用此功能并且此类不匹配被视为错误。

于 2012-04-13T19:20:27.223 回答
0

您是否尝试-lmysql过链接器自动lib添加和附加.lib

于 2012-04-12T21:06:04.663 回答