Я не очень хорош в английском sh, пожалуйста, прости меня за синтаксическую ошибку. Я хочу сделать mysql проект в Linux / windows с помощью Cmake, поэтому я использую Visual Studio для редактирования. И я создаю проект cmake в visual studio, во-первых, я только тестирую повышение в моем проекте, он успешно выполняется.
find_package(Boost
)
if (Boost_FOUND)
message(STATUS "find Boost:\"${Boost_INCLUDE_DIRS}\",ENABLE_BOOST is opened")
message(STATUS "find Boost:\"${Boost_LIBRARIES}\"")
include_directories(${Boost_INCLUDE_DIRS})
link_directories(${Boost_LIBRARY_DIRS})
endif (Boost_FOUND)
Я могу запустить тест по файловой системе, поэтому я хочу установить mysql разъем c ++ 8.0
include_directories("C:/Program Files/MySQL/MySQL Connector C++ 8.0/include")
link_directories("C:/Program Files/MySQL/MySQL Connector C++ 8.0/lib64/vs14")
link_directories("C:/Program Files/MySQL/mysql-8.0.18-winx64/lib")
add_executable (test "test.cpp")
target_link_libraries(test mysqlcppconn.dll libmysql.dll)
и я копирую lib mysql .dll и mysqlcppconn.lib (я не могу найти mysqlcppconn.dll, но могу использовать Visual Studio обычным проектом, успешно запущенным через mysqlcppconn.lib ) в мой проект cmake с test. cpp
, поэтому я запускаю код, но отображается сообщение об ошибке 0x00007FFEE1DBE710 (ucrtbased.dll), место чтения нарушения прав доступа в xstring.insert.h ( ms .h? я не знаю этот заголовок)
мой код есть, и я успешно запускаю обычный проект через vs2017, но cmake не может работать.
int main()
{
cout << "Hello CMake。" << endl;
cout << "You Finished." << endl;
string exepath = boost::filesystem::initial_path<boost::filesystem::path>().string();
cout << exepath << endl;
try {
sql::Driver *driver;
sql::Connection *con;
sql::Statement *stmt;
sql::ResultSet *res;
cout << "create success" << endl;
driver = get_driver_instance();
con = driver->connect("localhost", "root", "123");
con->setSchema("test");
stmt = con->createStatement();
res = stmt->executeQuery("select * from detect");
cout << "search..."<<endl;
while (res->next()) {
cout << "searhing..username:" << endl;
cout << res->getString("username") << endl;
cout << "searhing..password:" << endl;
cout << res->getString("password") << endl;
}
delete res;
delete stmt;
delete con;
}
catch (sql::SQLException&e) {
cout << "#ERR: SQLException in " << __FILE__;
cout << "(" << __FUNCTION__ << ") on line" << __LINE__ << endl;
cout << "#ERR:" << e.what();
cout << "(MySQL error code:" << e.getErrorCode();
cout << ",SQLState:" << e.getSQLState() << ")" << endl;
cout << "link failed" << endl;
}
return 0;
}
Я отлаживаю код, и это ошибка в
cout << res->getString("username") << endl;
Я обещаю, что с моими таблицами все в порядке
, и я успешно запускаю код через mysql c api через проект Visual Studio cmake, но mysql разъем с ++ не может.
если вы можете сказать мне, что я должен делать, спасибо, что я очень много!
Обновление: @Alex Я запускаю код, затем Visual Studio Auto go xstring_insert.h
// xstring_insert.h internal header
// Copyright (c) Microsoft Corporation. All rights reserved.
if (_State == ios_base::goodbit
&& _Ostr.rdbuf()->sputn(_Data, (streamsize)_Size)
!= (streamsize)_Size)
_State |= ios_base::badbit;
Моя ошибка происходит в if (). И визуальная студия выводит
Exception thrown at 0x00007FFEF776E710 (ucrtbased.dll) in test.exe: 0xC0000005: Access violation reading location 0xFFFFFFFFFFFFFFFF.
@ seccpur. Я добавляю .c_str () в свой код cout, и я успешно запускаюсь, не могли бы вы сказать, почему мне нужно это сделать. И я не использую .c_str (), который может успешно выполнять код в моей общей консоли windows.