c++ - Visual Studio 2012 - C MariaDB 客户端 - 错误 LNK2019 : unresolved external symbol _mysql_init@4

标签 c++ visual-studio-2012 static-libraries linker-errors mariadb


这是我发布的第一个问题,所以我希望这将是一次积极的体验:-)
我正在使用 W7 pro x64 + VS 2012 pro。我希望将我的 C++ 控制台项目文件链接到 MariaDBClient 1.0.0(在功能上等同于 C/connector MySQL 客户端)。
它非常简单并且有
- xx.h 的一个/include 目录包括(工作正常)
- 一个/lib 目录,包含 1 个 DLL (libmariadb.dll) 和 2 个 xx.lib 文件(“libmariadb.lib”最有可能用于服务器,“mariadbclient.lib”用于客户端(与我的需求相关的那个)) . 在编译时,一切正常(所以我的#include AND 目录包含正常),但是在 LINK 阶段,我收到此错误消息:

“cppconMariaDB02.obj:错误 LNK2019:函数 _wmain 中引用了未解析的外部符号 _mysql_init@4”

----- 程序是:------------------------

#pragma once

#include "stdafx.h"
#include <mysql.h>

int _tmain(int argc, _TCHAR* argv[])
{
    MYSQL *my; // OK //
    my = mysql_init(NULL); // Will NOT link //

    return 0;
}//end of program

我认为问题不是与连接器有关,而是与我在链接到库的选项中的错误有关。 这是我在项目属性中设置的:

Property Page -> Common Properties -> VC++ Directories ->
-> Include Directories = C:\L\SQLClient\mariadb_client-1.0.0-win64\mariadbclient\include;$(IncludePath)
Property Page -> Common Properties -> VC++ Directories ->
  Library Directories = C:\L\SQLClient\mariadb_client-1.0.0-win64\lib;$(LibraryPath)

Property Page -> Common Properties -> C/C++ ->
-> Additional Include Directories =
C:\L\SQLClient\mariadb_client-1.0.0-win64\mariadbclient\include;%(AdditionalIncludeDirectories)

=> Resulting Compile line:
/Yc"stdafx.h" /GS /analyze- /W3 /Gy /Zc:wchar_t /I"C:\L\SQLClient\mariadb_client-1.0.0-
win64\mariadbclient\include" /ZI /Gm /Od /sdl /Fd"Debug\vc110.pdb" /fp:precise /D "WIN32"
 /D "_DEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /errorReport:prompt /WX- /Zc:forScope
 /RTC1 /Gd /Oy- /MDd /Fa"Debug\" /EHsc /nologo /Fo"Debug\" /Fp"Debug\cppconMariaDB02.pch" 

For the linker (which fails):
Property Page -> Common Properties -> Linker -> General ->
Additional Library Directories = 
C:\L\SQLClient\mariadb_client-1.0.0-win64\lib;%(AdditionalLibraryDirectories)

Property Page -> Common Properties -> Linker -> Input ->
Additional Dependencies =
c:\L\SQLClient\mariadb_client-1.0.0-win64\lib\libmariadb.lib;c:\L\SQLClient\mariadb_client-1.0.0-win64\libc:\L\SQLClient\mariadb_client-1.0.0-win64\lib\libmariadb.lib;c:\L\SQLClient\mariadb_client-1.0.0-win64\lib\mariadbclient.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)

This results into the following linker options:
/OUT:"C:\LProj\vs\cppconMariaDB02\Debug\cppconMariaDB02.exe" /MANIFEST /NXCOMPAT 
/PDB:"C:\LProj\vs\cppconMariaDB02\Debug\cppconMariaDB02.pdb" 
/DYNAMICBASE "c:\L\SQLClient\mariadb_client-1.0.0-win64\lib\libmariadb.lib" 
"c:\L\SQLClient\mariadb_client-1.0.0-win64\lib\mariadbclient.lib" 
"kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib"
"shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" /DEBUG 
/MACHINE:X86 /INCREMENTAL /PGD:"C:\LProj\vs\cppconMariaDB02\Debug\cppconMariaDB02.pgd"
/SUBSYSTEM:CONSOLE /MANIFESTUAC:"level='asInvoker' uiAccess='false'"
/ManifestFile:"Debug\cppconMariaDB02.exe.intermediate.manifest" 
/ERRORREPORT:PROMPT /NOLOGO 
/LIBPATH:"C:\L\SQLClient\mariadb_client-1.0.0-win64\lib" 
/TLBID:1 

我在这个 Unresolved external symbol _mysql_init@4 错误上被困了整整一个星期,尽管在网上进行了大量搜索并进行了许多试验,但没有取得任何进展。

如果有人能告诉我链接到图书馆的正确方法,我将不胜感激!

这无疑是一个简单的选项,但我看不到任何其他可以编写路径或引用的地方。

提前感谢您的宝贵时间。

奥利维尔

最佳答案

确保您的项目和库在 32 位/64 位方面匹配。我在 VS2013 中制作了一个 32 位控制台应用程序并使用您的示例并下载了 64 位库。我得到了同样的错误。然后我将控制台应用程序制作成 64 位,不再有错误。

以下是针对 x64 的方法: http://msdn.microsoft.com/en-us/library/9yb4317s(v=vs.110).aspx

关于c++ - Visual Studio 2012 - C MariaDB 客户端 - 错误 LNK2019 : unresolved external symbol _mysql_init@4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22524385/

相关文章:

C++ - 为什么要根据 op+= 而不是相反的方式来实现 op+?

c++ - 具有不同返回类型的显式特化模板类成员函数

vb.net - 找不到方法 : 'Void System. Web.UI.ScriptResourceDefinition

linker - 使用 ld.gold 将静态库直接链接到可执行文件

c++ - 使用VS2005编译时静态库文件巨大,使用gcc编译时正常大小

c - 将windows中的linux静态库与cygwin链接起来

c++ - 在调用传递给模板函数的函数时调用指向成员函数的指针

c++ - std::sort 仿函数声明

c# - 在 RDLC 报告中处理数组和聚合

visual-studio-2012 - 启动后,Visual Studio 2012 不会打开以前打开的文件