Проблема кодирования вывода компоновщика MSVC в среде UTF-8 ⇐ C++

Программы на C++. Форум разработчиков
Anonymous
Проблема кодирования вывода компоновщика MSVC в среде UTF-8

Сообщение Anonymous »

Я столкнулся с проблемой кодирования вывода ошибок компоновщика MSVC при сборке проекта C++ в Windows. Сообщения об ошибках компоновщика отображаются в моей консоли в виде искаженного текста, для которого установлена ​​кодировка UTF-8.
Мой проект использует CMake в качестве системы сборки и разработан в среде IDE JetBrains CLion. . Все мои исходные файлы закодированы в UTF-8. Языковой стандарт моей системы также установлен на UTF-8, а консоль использует кодовую страницу 65001 (UTF-8).
Вот пример вывода:

Код: Выделить всё

agentprocesscontroller.obj : error LNK2019: ����������ⲿ���� "public: void __cdecl DDS_UserInteractManager::TopicData::publish(class boost::shared_ptr const &)" (?publish@?$TopicData@V?$shared_ptr@UDataType@vec_EntityBasicData@EnvSimuData@@@boost@@Uin_tag@DDS_UserInteractManager@@@DDS_UserInteractManager@@QEAAXAEBV?$shared_ptr@UDataType@vec_EntityBasicData@EnvSimuData@@@boost@@@Z)�������ں��� ...
Я не знаю, как решить эту проблему. Есть ли способ изменить кодировку вывода компоновщика MSVC или это известная проблема с другим решением? Буду очень признателен за любые рекомендации!
Вот что я уже пробовал:
  • Я установил /utf- 8 параметр компиляции в файле CMakeLists.txt для MSVC:

    Код: Выделить всё

    if (MSVC)
    set(CMAKE_C_FLAGS /utf-8)
    set(CMAKE_CXX_FLAGS /utf-8)
    # enable boost exception handling
    set(CMAKE_CXX_FLAGS "/EHsc ${CMAKE_CXX_FLAGS}")
    endif ()
    
  • Я подтвердил, что для кодовой страницы консоли установлено значение 65001 (UTF-8), с помощью команды chcp.
  • Я подтвердил, что все мои исходные файлы закодированы в UTF-8.
  • Я проверил это с помощью простой программы, которая намеренно вызывает ошибку компоновщика, и она будет также выводится в искаженном виде.

Код: Выделить всё

#include 

void foo();  // Function declaration without a definition

int main() {
foo();  // Call to undefined function
return 0;
}
Интересно, что эта проблема возникает только при ошибках компоновщика. Ошибки компиляции корректно отображаются в консоли.
Вот пример ошибки компиляции, которая отображается правильно:

Код: Выделить всё

F:\Program\SimCSC\ProxyV2\main.cpp(10): error C2146: 语法错误: 缺少“;”(在标识符“QApplication”的前面) [F:\Program\SimCSC\ProxyV2\cmake-build-debug\ProxyV2.vcxproj]

Несмотря на все эти настройки, выходные данные компоновщика MSVC по-прежнему выглядят искаженными при возникновении ошибок связывания.


Подробнее здесь: https://stackoverflow.com/questions/769 ... nvironment

Вернуться в «C++»