Как исправить ошибку: "LNK2019 ссылка на неразрешенный внешний символ"?
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.60] |
|
|
| Страницы: (6) « Первая ... 2 3 [4] 5 6 все ( Перейти к последнему сообщению ) |
Как исправить ошибку: "LNK2019 ссылка на неразрешенный внешний символ"?
|
Сообщ.
#46
,
|
|
|
|
Ну так вы же через командную строку используете localhost, а не dns или ip вашей сетевой на компьютере. Вот и проверяйте подключение к серверу по тем же параметрам в программе или через браузер, как я показал ранее.
|
|
Сообщ.
#47
,
|
|
|
|
Цитата DDim1000 @ Ну вам же Qraizer написал что для Release так же НУЖНО настроить пути и библиотеки |
|
Сообщ.
#48
,
|
|
|
|
Переключил на Release, теперь такая ошибка:
![]() ![]() MySQL Error: Authentication plugin 'mysql_native_password' cannot be loaded: Не найден указанный модуль. D:\Programming\VS\source\repos\school\x64\Release\school.exe (процесс 7780) завершил работу с кодом 0 (0x0). Нажмите любую клавишу, чтобы закрыть это окно: Скопировал файл mysql_native_password.dll в папку с exe-файлом, но ошибка осталась. |
|
Сообщ.
#49
,
|
|
|
|
надо было скопировать полностью папку plugin. Он ищет именно в папке.
Почему так - надо спрашивать у разрабов MySQL connector ЗЫ. Qraizer таки был прав использовть релизную dll для дебага нельзя. Посыпаю голову пеплом. https://dev.mysql.com/doc/dev/connector-cpp...test/usage.html On Windows it is not possible to mix code built in release and debug modes. И там же по поводу папки plugin (можно решить через переменную среды). В общем в доках все есть. Нужно только их прочитать. MySQL client library plugins The classic API is implemented using the MySQL client library which might need to load plugins during some operations (mainly during authentication). In case of system-wide installation the required plugins (and their dependencies) should be also installed system-wide and available at the default location where the client library looks for them. If however Connector/C++ was installed to a local directory the plugins (and their dependencies) are installed together with the connector at ${mysql-concpp_DIR}/lib64/plugins but the client library will not know how to find them. To fix this pass their location as PLUGIN_DIR connection option that is recognized by the classic API. Note Client library plugins must be installed and PLUGIN_DIR must be correctly set (if needed) on the target host on which the application is run. This might be different from the environment in which application was built. Note that client library plugins are loaded dynamically at run-time and they are not required during build process. Client library plugins can have further dependencies. For example authentication_kerberos_client plugin depends on Kerberos libraries and when used these libraries must be found on the target system. If client library plugins are not available the connector will still work correctly provided that it does not invoke any functionality that requires these plugins. For example if the server to which it connects does not have any accounts that use advanced authentication mechanisms that would require use of client library authentication plugins. In case of a local installation the mysql-concpp module sets the MYSQL_CONCPP_PLUGIN_DIR variable to the location where bundled client library plugins (and their dependencies) are located inside connector installation directory. Depending on the deployment strategy this information can be used, for example, to bundle the available plugins with the final application. In case of system-wide installation the plugins are not bundled with the connector and MYSQL_CONCPP_PLUGIN_DIR variable is not set. |
|
|
|
|
|
Заработало!!!
Большое спасибо за помощь! ![]() ![]() Подключение установлено успешно! Результат: 10.4.32-MariaDB |
|
Сообщ.
#51
,
|
|
|
|
Здравствуйте!
Возник вопрос: как сделать, чтобы русcкие буквы отображались корректно? ![]() ![]() Подключение установлено успешно! |1|Р"РчР?РёС?| |2|Р>С'Р?С?| |
|
Сообщ.
#52
,
|
|
|
|
Цитата DDim1000 @ Возник вопрос: как сделать, чтобы русcкие буквы отображались корректно? Лучший вариант (но я еще сам не пробовал) - использовать ConEmu в качестве терминала, настроенным на UTF-8 по умолчанию + в студии использовать расширение ConEmu Integration 2017. Подчёркиваю, я сам этим пока не пользовался, но интересно, и я скоро сам попробую. В этом большой бонус - полноценный терминал с UTF-8 кодировкой. Второй вариант - писать свою функцию преобразования перед печатью на стандартный терминал со стандартной кодировкой cp866. Должно получиться что-то типа: ![]() ![]() #include <string> #include <iostream> #include <windows.h> std::string utf8_to_cp866(const std::string& utf8_str) { // 1. UTF-8 -> UTF-16 int wide_size = MultiByteToWideChar(CP_UTF8, 0, utf8_str.c_str(), -1, nullptr, 0); std::wstring wide_str(wide_size, 0); MultiByteToWideChar(CP_UTF8, 0, utf8_str.c_str(), -1, &wide_str[0], wide_size); // 2. UTF-16 -> cp866 int cp866_size = WideCharToMultiByte(866, 0, wide_str.c_str(), -1, nullptr, 0, nullptr, nullptr); std::string cp866_str(cp866_size, 0); WideCharToMultiByte(866, 0, wide_str.c_str(), -1, &cp866_str[0], cp866_size, nullptr, nullptr); return cp866_str; } int main() { std::string utf8_str = u8"Привет, ворлд!"; std::string cp866_str = utf8_to_cp866(utf8_str); std::cout << cp866_str << std::endl; return 0; } С кириллицей должно прокатить. Но, сам понимаешь, символы юникода, которым нет соответствия в cp866, выведены не будут. |
|
Сообщ.
#53
,
|
|
|
|
Цитата Majestio @ Второй вариант - писать свою функцию преобразования перед печатью на стандартный терминал со стандартной кодировкой cp866. Должно получиться что-то типа: Третий вариант. Использовать WSL или вовсе перейти на Linux. Там давно уже UTF8 и нету этих приколов. |
|
Сообщ.
#54
,
|
|
|
|
Четвертый вариант. Использовать либу boost
![]() ![]() #include <boost/locale.hpp> #include <string> #include <iostream> int main() { std::string utf8_str = u8"Привет, васьминогам!"; std::cout << boost::locale::conv::from_utf(utf8_str, "CP866") << std::endl; return 0; } |
|
Сообщ.
#55
,
|
|
|
|
Команда в консоли "chcp 65001", програмно SetConsoleOutputCP(), конкретно в Плюсах std::locale(). Проще свои сырцы уже представлять компилятору к нужной кодировке. И нужен соответствующий шрифт, естественно.
Только вот вопрос: а тебе этот UTF-8 вообще зачем? Многобайтная кодировка – это жестокая боль, что б тебе не советовали из никсов. |
|
Сообщ.
#56
,
|
|
|
|
Цитата Qraizer @ Команда в консоли "chcp 65001", програмно SetConsoleOutputCP(), конкретно в Плюсах std::locale(). Qraizer, вот скажи, зачем ты так издеваешься над человеком этим своим советом? ![]() С каких это пор виндовая стандартная консоль дружила с многобайтовыми кодировками? Не, ну серьёзно. Ну покажи код, как в наш век гомоглобальной экзистенции модуляции синтеза, на примере вывода UTF-8 строк, сделать печать прямым выводом, без перекодировки в cp866 и вывести юникод в эту всратую консоль, чисто одной сменой локали... Цитата Qraizer @ Проще свои сырцы уже представлять компилятору к нужной кодировке. Дело не в одних сырцах. Есть ещё и данные из БД MySQL, которые туда нужно вписать, и оттуда ещё и читать. И я тебе, как родному, скажу: лучше это будет, если таблицы будут там созданы в кодировке utf8mb4 вместе с современными правилами сортировки ("collation" — так это называется на языке западных кровавых империалистов) utf8mb4_unicode_520_ci. Вот тогда, и именно тогда, и только тогда — никакая внешняя индустриальная интервенция (особенно китайская) нам не страшна!!! Вот именно тогда мы будем готовы кодить в жёстком стиле, по всем фронтам, но соблюдая современные международные нормы. Свободу восьминогам! |
|
Сообщ.
#57
,
|
|
|
|
![]() ![]() #include <iostream> #include <string> #include <locale> int main() { std::string str = u8"Хеллоу, уорлд!"; std::locale locRusUTF8("russian.utf8"); std::cout.imbue(locRusUTF8); std::cout << str << std::endl; } ![]() ![]() D:\Work\DelMe>chcp 65001 Active code page: 65001 D:\Work\DelMe>delMe.exe Хеллоу, уорлд! D:\Work\DelMe> Добавлено UTF-8 вам в одну руку и флаг в другую, уважаемые уважатели суррогатных байт. А я вот не люблю, когда не могу сделать ![]() ![]() std::replace(str.begin(), str.end(), u8'л', u8'l'); когда str.length() возвращает 25 вместо правильного 14 и тем более когда str[6] вместо u8',' возвращает мне некое '\xD0' |
|
Сообщ.
#58
,
|
|
|
|
Просто ты не распознал всей вкусности юникода!
Да, пришли времена когда печатаемый символ может/должен занимать более одного байта. Смирись с этим, или проиграешь!!! |
|
Сообщ.
#59
,
|
|
|
|
|
|
|
|
|
Подскажите, пожалуйста, почему ошибка?:
это объявление не содержит класс хранения или спецификатор типа. Ст. 15. На 15 ст. находится вызов функции system("chcp 65001");. ![]() ![]() #include "MySQLConnection.h" #include <cstdlib> // system() #include <iostream> #include <memory> #include <mysql_driver.h> #include <mysql_connection.h> #include <cppconn/driver.h> #include <cppconn/exception.h> #include <cppconn/resultset.h> #include <cppconn/statement.h> #include <cppconn/prepared_statement.h> namespace school { system("chcp 65001"); MySQLConnection::MySQLConnection(const std::string& host, int port, const std::string& user, const std::string& password, const std::string& database) { sql::mysql::MySQL_Driver* driver = sql::mysql::get_mysql_driver_instance(); std::string connectionString = "tcp://" + host + ":" + std::to_string(port); connection.reset(driver->connect(connectionString, user, password)); // Настройка кодировки UTF-8 std::unique_ptr<sql::Statement> stmt(connection->createStatement()); stmt->execute("SET NAMES 'utf8'"); stmt->execute("SET CHARACTER SET utf8"); connection->setSchema(database); } void MySQLConnection::executeQuery(const std::string& query) { std::unique_ptr<sql::Statement> stmt(connection->createStatement()); std::unique_ptr<sql::ResultSet> res(stmt->executeQuery(query)); while (res->next()) { // Обработка результатов std::cout << "Результат: " << res->getString(1) << std::endl; } } bool MySQLConnection::isConnected() { return connection.get() != nullptr && !connection->isClosed(); } } |