#include <winsock2.h> // mysql.h中需要
#include <mysql/mysql.h>// 确保加了mysql的头文件到编译器目录里/**
* 我只演示了连接,执行语句等请搜索网上例子
* 项目需要连接 libmysql.lib
* 执行程序需要包含 libmySQL.dll
*/
int main()
{
MYSQL * temp = NULL
MYSQL * temp2 = NULL
my_bool my_true = true const char* hostname = "localhost"//数据库地址
const char* usernmae = "root" //用户名
const char* password = "root" //密码
const char* dbName = "test" //数据库名
unsigned int port= 3306 //端口temp = mysql_init( NULL )
if(!temp)
{
printf("初始化失败")
return 0
}if(mysql_options(temp, MYSQL_SET_CHARSET_NAME, "gbk"))
{
printf("设置charset失败")
return 0
}if(mysql_options(temp, MYSQL_OPT_RECONNECT, &my_true))
{
printf("设置可重连失败")
return 0
}temp2 = mysql_real_connect(temp, hostname, usernmae, password, dbName, port, NULL, 0)
if(!temp2)
{
printf("连接失败")
mysql_close(temp)
return 0
}printf("连接成功,`temp2` 即为mysql连接,用做后续的查询等 *** 作.") return 0
}
下载了boost包之后,运行其根目录下的bootstrap.bat生成bjam.exe文件,bjam.exe是生成boost库的.lib文件的工具然后在命令行输入
bjam stage --toolset=msvc-10.0 --stagedir="D:/U3D Demo/AsioTestServer/boost_1_45_0" link=shared runtime-link=shared threading=multi debug release
或
bjam stage --toolset=msvc-10.0 --stagedir="D:/U3D Demo/AsioTestServer/boost_1_45_0" link=static runtime-link=static threading=multi debug release
上一句是生成动态库,下一句是生成静态库
编译时间比较长,编译完成以后,目录中会多一个lib目录,里面就是库文件了
回到VS2010一编译,报错之!错误 1 error LNK1104: 无法打开文件“libboost_system-vc100-mt-gd-1_45.lib” ......
查找之,使用boost库不需要在工程设置中显式的指定库名字,而是由boost自身来完成这个设定的。由于boost库跨平台并且支持多个编译环境,因此这个被链接库文件的文件名是根据当前编译的配置动态生成的。boost_system是库的基本名称,vc100是编译环境,mt表示这是一个多线程库,gd表示包含调试信息,最后的1_45是版本号。检查lib目录的库文件,发现有boost_system-vc100-mt-gd-1_45.lib,所以很明显,在库名生成的过程中出现了问题,多了一个“lib”前缀。
打开boost/regex.hpp,继续打开boost/regex/config.hpp文件,最终可以发现动态链接配置的功能是由boost/config/auto_link.hpp统一实现的。在这个文件开头的注释里详细说明了使用方式。这里提到了名称的构造公式:
BOOST_LIB_PREFIX
+ BOOST_LIB_NAME
+ "_"
+ BOOST_LIB_TOOLSET
+ BOOST_LIB_THREAD_OPT
+ BOOST_LIB_RT_OPT
"-"
+ BOOST_LIB_VERSION
根据我们的错误,我们应该检查BOOST_LIB_PREFIX的值为什么是“lib”而不是空的。通过搜索,发现
[cpp] view plaincopyprint?
#if (defined(_DLL) || defined(_RTLDLL)) &&defined(BOOST_DYN_LINK)
# define BOOST_LIB_PREFIX
#elif defined(BOOST_DYN_LINK)
# error "Mixing a dll boost library with a static runtime is a really bad idea..."
#else
# define BOOST_LIB_PREFIX "lib"
#endif
[cpp] view plaincopyprint?
#if (defined(_DLL) || defined(_RTLDLL)) &&defined(BOOST_DYN_LINK)
# define BOOST_LIB_PREFIX
#elif defined(BOOST_DYN_LINK)
# error "Mixing a dll boost library with a static runtime is a really bad idea..."
#else
# define BOOST_LIB_PREFIX "lib"
#endif
现在终于清楚了,我们应该在工程设置中加入_DLL定义或者_RTLDLL定义,并且指定boost库采用动态连接(定义BOOST_DYN_LINK)。
在工程设置中加入_DLLBOOST_DYN_LINK,链接通过。 但又报另一个库链接错误,错误原因相同,查看auto_link.hpp文件末尾,发现
#if defined(BOOST_DYN_LINK)
# undef BOOST_DYN_LINK
#endif
这样,刚定义的BOOST_DYN_LINK在用过一次之后就失效了,所以注释这一段,之后编译就没问题了。分析要么在工程中添加BOOST_DYN_LINK,然后注释undef这段代码,要么把BOOST_DYN_LINK定义在auto_link.hpp的开头。
点
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)