Gaf*_*ffi 6 c++ mysql linker g++ path
我undefined reference to 'mysql_suchandsuch@#'试图将我的程序与5.5服务器提供的MySQL库链接时收到消息.安装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的特定经验?
以下命令对我使用 2011 年 11 月起的 GCC 4.6.1 运行良好:
\n\ng++ my.cpp -I D:\\Opt\\MySQL5.5\\include ^\n D:\\Opt\\MySQL5.5\\lib\\libmysql.dll -o myWithDll.exe\n\ng++ my.cpp -I D:\\Opt\\MySQL5.5\\include ^\n -L D:\\Opt\\MySQL5.5\\lib -lmysql -o myWithLib.exe\nRun Code Online (Sandbox Code Playgroud)\n\n因此,针对 LIB 和 DLL 的链接都可以工作。
\n\n您可能会收到警告(请参阅 Gaffi 的评论)。这是因为链接器会在您没有指定的情况下为您进行模糊链接;通常情况下,它会链接失败。不过,它是友善的,让它为你工作,同时警告你在没有你要求的情况下发生的事情。抑制警告的方法是使模糊链接显式化:
\n\ng++ -Wl,--enable-stdcall-fixup my.cpp -I D:\\Opt\\MySQL5.5\\include ^\n D:\\Opt\\MySQL5.5\\lib\\libmysql.dll -o myWithDll.exe\n\ng++ -Wl,--enable-stdcall-fixup my.cpp -I D:\\Opt\\MySQL5.5\\include ^\n -L D:\\Opt\\MySQL5.5\\lib -lmysql -o myWithLib.exe\nRun Code Online (Sandbox Code Playgroud)\n\n这是链接器的 Cygwin/RedHat/MinGW 扩展;文档在这里:
\n\n--enable-stdcall-fixup\n--disable-stdcall-fixup\nRun Code Online (Sandbox Code Playgroud)\n\n\n\n如果链接[er]发现它无法解析的符号,它将尝试通过查找另一个仅在格式上不同的已定义符号来\n\n执行\xe2\x80\x9cfuzzy链接\xe2\x80\x9d符号名称(cdecl 与 stdcall)并将\n 通过链接到匹配项来解析该符号。例如,未定义的符号 _foo 可能链接到函数 _foo@12,或者未定义的符号 _bar@16 可能链接到函数 _bar。当链接器执行此操作时,它会打印一条警告,因为它通常应该链接失败,但有时从第三方 dll 生成的导入库可能需要此功能才能使用。如果指定 --enable-stdcall-fixup,则完全启用此功能并且不会打印警告。如果指定 --disable-stdcall-fixup,则禁用此功能,并且此类不匹配将被视为错误。[此选项\n特定于链接器的 i386 PE 目标端口]
\n
| 归档时间: |
|
| 查看次数: |
2048 次 |
| 最近记录: |