尝试将程序与5.5服务器提供的MySQL库链接时,我收到undefined reference to 'mysql_suchandsuch@#'
条消息。安装MySQL时,我使用了默认路径,在Windows上我是C:\Program Files\MySQL\MySQL Server 5.5\
。最初,我曾经以为这些空间引起了我的悲痛,但我想我已经正确地找出了如何指向没有空格的图书馆路径(仍然没有运气)。如果还有其他可能的原因,请告诉我。
我已经回顾了本网站上的一系列问题,试图解决我的问题......
使用mingw / g ++,我尝试根据自己的研究以及建议使用以下选项进行链接:
在所有情况下,我已将-L
/ -l
选项放在声明的最右边部分,因为我知道这很重要。
我已经确认这些库确实存在。在/ lib目录中,我有libmysql.lib,mysqlclient.lib和libmysql.dll。我没有尝试与.dll链接,因为没有我评论的教程/论坛建议。
我没有使用MAKEFILES。
有没有人对g ++ / MySQL有特定的经验?
答案 0 :(得分: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扩展; the docs are here:
--enable-stdcall-fixup
--disable-stdcall-fixup
如果链接[er]找到无法解析的符号,它将尝试 通过寻找另一个不同的定义符号来做“模糊链接” 只有符号名称(cdecl vs stdcall)的格式才有 通过链接到匹配来解析该符号。例如, 未定义的符号_foo可能链接到函数_foo @ 12,或者 未定义的符号_bar @ 16可能链接到函数_bar。什么时候 链接器执行此操作,它会打印一个警告,因为它通常应该 没有链接,但有时导入生成的库 第三方dll可能需要此功能才能使用。如果你指定 --enable-stdcall-fixup,此功能已完全启用并发出警告 不打印。如果指定--disable-stdcall-fixup,则此功能为 禁用和这种不匹配被认为是错误。 [这个选项 特定于链接器的i386 PE目标端口]
答案 1 :(得分:0)
您是否尝试-lmysql
,因为链接器会自动添加lib
并附加.lib