对于这样一个菜鸟问题,我很抱歉,但是在编译最简单的程序以连接到 MySQL 数据库并在那里执行“SELECT”命令时,我无法用我的 Xcode (4.6.1) 赢得战斗。
该程序来自 MySQL Connector/C++ 的“examples”目录:
/* Standard C++ includes */
#include <stdlib.h>
#include <iostream>
#include <sstream>
#include <stdexcept>
#include "mysql_connection.h"
#include "mysql_driver.h"
#include <cppconn/driver.h>
#include <cppconn/exception.h>
#include <cppconn/resultset.h>
#include <cppconn/statement.h>
std::string url;
std::string user;
std::string pass;
std::string database;
/**
* Usage example for Driver, Connection, (simple) Statement, ResultSet
*/
int main(int argc, const char **argv)
{
sql::Driver *driver;
std::auto_ptr< sql::Connection > con;
url = "tcp://127.0.0.1:3306";
user = "john";
pass = "john";
database = "cunda_sales";
try {
driver = sql::mysql::get_driver_instance();
/* Using the Driver to create a connection */
con.reset(driver->connect(url, user, pass));
con->setSchema(database);
sql::Statement* stmt = con->createStatement();
stmt->execute("INSERT INTO ru (store_name) values ('Test is successful')");
} catch (sql::SQLException &e) {
return EXIT_FAILURE;
} catch (std::runtime_error &e) {
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
在 Xcode 中运行该程序后,我收到程序编译成功的消息,但在调用时它停止运行:
driver->connect(url, user, pass)
给我一个错误
EXC_BAD_ACCESS (code=13, address=0x0)
这里描述了几乎相同的情况:here on this site
我重复了这些人所遵循的所有步骤,但我对那个错误无能为力。我还尝试使用以下命令在终端中编译程序:
c++ -o test -I /usr/local/boost_1_53_0 -lmysqlcppconn main.cpp
一切正常,但不是在 Xcode 中。
在这个线程中找到了解决方案,但对于我的愚蠢感到抱歉,我只是不知道我需要在我的 Xcode 中/使用我的 Xcode 做什么才能使其以正确的方式编译程序来工作。
伙计们在那里写道,问题出在 -stdlib=libc++ 标志中,Xcode 使用该标志来编译代码。那么我应该怎么做才能避免这个错误呢?从 Xcode 编译器中删除该标志或使用另一个编译器?或者我应该只需要用这个标志重新编译 MySQL 连接器/C++?
请解释我最终的解决方案。谢谢!