Как мне использовать/установить ICU и использовать его в моем проекте C++ Visual Studio 2022?

Я новичок в C++ и последние несколько дней пытаюсь использовать библиотеку ICU. Я следовал этому руководству на ICU GitHub, но безрезультатно.

Я обнаружил, что могу #include <icu.h> изначально, но я не уверен, какие функции он обеспечивает и как его использовать, и файл выглядит лишенным. На этой странице обсуждается, как это используется в Windows, но не особо конкретно.

Я попытался установить его, следуя инструкциям на GitHub с помощью Cygwin. Для установки VS2022, похоже, требуется Cygwin . Мне не удалось получить этот вывод.

PS C:\Users\user\Dev\ICU\icu\source> bash ./runConfigureICU Cygwin/MSVC
export CPP= CC=cl CXX=cl CPPFLAGS= CFLAGS=-Gy -MD  CXXFLAGS=-Gy -MD  LDFLAGS= MAKE=
Running ./configure   for Windows with Cygwin using Microsoft Visual C++ compiler

checking for ICU version numbers... release 73.1, library 73.1, unicode version 15.0
checking build system type... x86_64-unknown-cygwin
checking host system type... x86_64-unknown-cygwin
checking whether to build debug libraries... no
checking whether to build release libraries... yes
checking whether the C compiler works... no
configure: error: in `/cygdrive/c/Users/user/Dev/ICU/icu/source':
configure: error: C compiler cannot create executables
See `config.log' for more details
./runConfigureICU: ./configure failed

config.log

This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.

It was created by ICU configure 73.1, which was
generated by GNU Autoconf 2.69.  Invocation command line was

  $ ./configure 

## --------- ##
## Platform. ##
## --------- ##

hostname = desktop
uname -m = x86_64
uname -r = 3.4.6-1.x86_64
uname -s = CYGWIN_NT-10.0-22621
uname -v = 2023-02-14 13:23 UTC

/usr/bin/uname -p = unknown
/bin/uname -X     = unknown

/bin/arch              = x86_64
/usr/bin/arch -k       = unknown
/usr/convex/getsysinfo = unknown
/usr/bin/hostinfo      = unknown
/bin/machine           = unknown
/usr/bin/oslevel       = unknown
/bin/universe          = unknown

PATH: /cygdrive/c/Program Files/Eclipse Adoptium/jre-17.0.7.7-hotspot/bin
PATH: /cygdrive/c/windows/system32
PATH: /cygdrive/c/windows
PATH: /cygdrive/c/windows/System32/Wbem
PATH: /cygdrive/c/windows/System32/WindowsPowerShell/v1.0
PATH: /cygdrive/c/windows/System32/OpenSSH
PATH: /cygdrive/c/Program Files/Microsoft VS Code/bin
PATH: /cygdrive/c/Program Files/dotnet
PATH: /cygdrive/c/Program Files/Git/cmd
PATH: /usr/bin
PATH: /cygdrive/c/Program Files/CMake/bin
PATH: /cygdrive/c/Users/user/AppData/Local/Microsoft/WindowsApps
PATH: /cygdrive/c/Users/user/.dotnet/tools


## ----------- ##
## Core tests. ##
## ----------- ##

configure:2706: checking for ICU version numbers
configure:2739: result: release 73.1, library 73.1, unicode version 15.0
configure:2778: checking build system type
configure:2792: result: x86_64-unknown-cygwin
configure:2812: checking host system type
configure:2825: result: x86_64-unknown-cygwin
configure:2883: checking whether to build debug libraries
configure:2895: result: no
configure:2900: checking whether to build release libraries
configure:2912: result: yes
configure:3033: checking for C compiler version
configure:3042: cl --version >&5
./configure: line 3044: cl: command not found
configure:3053: $? = 127
configure:3042: cl -v >&5
./configure: line 3044: cl: command not found
configure:3053: $? = 127
configure:3042: cl -V >&5
./configure: line 3044: cl: command not found
configure:3053: $? = 127
configure:3042: cl -qversion >&5
./configure: line 3044: cl: command not found
configure:3053: $? = 127
configure:3073: checking whether the C compiler works
configure:3095: cl -Gy -MD    conftest.c  >&5
./configure: line 3097: cl: command not found
configure:3099: $? = 127
configure:3137: result: no
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "ICU"
| #define PACKAGE_TARNAME "International Components for Unicode"
| #define PACKAGE_VERSION "73.1"
| #define PACKAGE_STRING "ICU 73.1"
| #define PACKAGE_BUGREPORT "http://icu-project.org/bugs"
| #define PACKAGE_URL "http://icu-project.org"
| /* end confdefs.h.  */
| 
| int
| main ()
| {
| 
|   ;
|   return 0;
| }
configure:3142: error: in `/cygdrive/c/Users/user/Dev/ICU/icu/source':
configure:3144: error: C compiler cannot create executables
See `config.log' for more details

## ---------------- ##
## Cache variables. ##
## ---------------- ##

ac_cv_build=x86_64-unknown-cygwin
ac_cv_env_build_alias_set=
ac_cv_env_build_alias_value=
ac_cv_env_CC_set=set
ac_cv_env_CC_value=cl
ac_cv_env_CCC_set=
ac_cv_env_CCC_value=
ac_cv_env_CFLAGS_set=set
ac_cv_env_CFLAGS_value='-Gy -MD '
ac_cv_env_CPP_set=
ac_cv_env_CPP_value=
ac_cv_env_CPPFLAGS_set=
ac_cv_env_CPPFLAGS_value=
ac_cv_env_CXX_set=set
ac_cv_env_CXX_value=cl
ac_cv_env_CXXFLAGS_set=set
ac_cv_env_CXXFLAGS_value='-Gy -MD '
ac_cv_env_host_alias_set=
ac_cv_env_host_alias_value=
ac_cv_env_ICULEHB_CFLAGS_set=
ac_cv_env_ICULEHB_CFLAGS_value=
ac_cv_env_ICULEHB_LIBS_set=
ac_cv_env_ICULEHB_LIBS_value=
ac_cv_env_LDFLAGS_set=
ac_cv_env_LDFLAGS_value=
ac_cv_env_LIBS_set=
ac_cv_env_LIBS_value=
ac_cv_env_PKG_CONFIG_LIBDIR_set=
ac_cv_env_PKG_CONFIG_LIBDIR_value=
ac_cv_env_PKG_CONFIG_PATH_set=
ac_cv_env_PKG_CONFIG_PATH_value=
ac_cv_env_PKG_CONFIG_set=
ac_cv_env_PKG_CONFIG_value=
ac_cv_env_target_alias_set=
ac_cv_env_target_alias_value=
ac_cv_host=x86_64-unknown-cygwin

## ----------------- ##
## Output variables. ##
## ----------------- ##

ac_ct_CC=''
ac_ct_CXX=''
AR=''
ARFLAGS=''
bindir='${exec_prefix}/bin'
build_alias=''
build_cpu='x86_64'
build_os='cygwin'
build_vendor='unknown'
build='x86_64-unknown-cygwin'
CC='cl'
CFLAGS='-Gy -MD '
COMPILE_LINK_ENVVAR=''
CPP=''
CPPFLAGS=''
cross_buildroot=''
cross_compiling='no'
CXX='cl'
CXXFLAGS='-Gy -MD '
DATA_PACKAGING_MODE=''
DATA_TRUE=''
datadir='${datarootdir}'
datarootdir='${prefix}/share'
DEFS=''
docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
DOXYGEN=''
dvidir='${docdir}'
ECHO_C=''
ECHO_N='-n'
ECHO_T=''
EGREP=''
ENABLE_DEBUG='0'
ENABLE_RELEASE='1'
ENABLE_RPATH=''
ENABLE_SHARED=''
ENABLE_STATIC=''
exec_prefix='NONE'
EXEEXT=''
EXTRAS_TRUE=''
FUZZER_TRUE=''
GENCCODE_ASSEMBLY=''
GREP=''
HAVE_MMAP=''
host_alias=''
host_cpu='x86_64'
host_os='cygwin'
host_vendor='unknown'
host='x86_64-unknown-cygwin'
htmldir='${docdir}'
ICU_ECHO_C=''
ICU_ECHO_N='-n'
ICU_ECHO_T=''
ICUDATA_CHAR=''
ICUIO_TRUE=''
ICULEHB_CFLAGS=''
ICULEHB_LIBS=''
ICULIBSUFFIX=''
ICULIBSUFFIXCNAME=''
includedir='${prefix}/include'
infodir='${datarootdir}/info'
INSTALL_DATA=''
INSTALL_ICU_CONFIG='true'
INSTALL_PROGRAM=''
INSTALL_SCRIPT=''
LAYOUTEX_TRUE=''
LDFLAGS=''
LIB_M=''
LIB_THREAD=''
LIB_VERSION_MAJOR='73'
LIB_VERSION='73.1'
LIBCFLAGS=''
LIBCXXFLAGS=''
libdir='${exec_prefix}/lib'
libexecdir='${exec_prefix}/libexec'
LIBOBJS=''
LIBS=''
localedir='${datarootdir}/locale'
localstatedir='${prefix}/var'
LTLIBOBJS=''
mandir='${datarootdir}/man'
OBJEXT=''
oldincludedir='/usr/include'
PACKAGE_BUGREPORT='http://icu-project.org/bugs'
PACKAGE_NAME='ICU'
PACKAGE_STRING='ICU 73.1'
PACKAGE_TARNAME='International Components for Unicode'
PACKAGE_URL='http://icu-project.org'
PACKAGE_VERSION='73.1'
PACKAGE='icu'
PATH_SEPARATOR=':'
pdfdir='${docdir}'
PKG_CONFIG_LIBDIR=''
PKG_CONFIG_PATH=''
PKG_CONFIG=''
pkgicudatadir=''
platform_make_fragment_name=''
platform_make_fragment=''
platform=''
PLUGINS_TRUE=''
prefix='NONE'
program_transform_name='s,x,x,'
psdir='${docdir}'
PYTHON=''
RANLIB=''
runstatedir='${localstatedir}/run'
SAMPLES_TRUE=''
sbindir='${exec_prefix}/sbin'
SED=''
sharedstatedir='${prefix}/com'
SHELL='/bin/sh'
sysconfdir='${prefix}/etc'
target_alias=''
TESTS_TRUE=''
thepkgicudatadir=''
TOOLS_TRUE=''
U_DEFAULT_SHOW_DRAFT=''
U_DISABLE_RENAMING=''
U_ENABLE_DYLOAD=''
U_ENABLE_TRACING=''
U_HAVE_DATA=''
U_HAVE_DIRENT_H=''
U_HAVE_EXTRAS=''
U_HAVE_FUZZER=''
U_HAVE_ICUIO=''
U_HAVE_INTTYPES_H=''
U_HAVE_LAYOUTEX=''
U_HAVE_LIB_SUFFIX=''
U_HAVE_NL_LANGINFO_CODESET=''
U_HAVE_PLACEMENT_NEW=''
U_HAVE_PLUGINS=''
U_HAVE_POPEN=''
U_HAVE_SAMPLES=''
U_HAVE_STRTOD_L=''
U_HAVE_TESTS=''
U_HAVE_TIMEZONE=''
U_HAVE_TOOLS=''
U_HAVE_TZNAME=''
U_HAVE_TZSET=''
U_HAVE_WCHAR_H=''
U_HAVE_WCSCPY=''
U_IS_BIG_ENDIAN=''
U_MAKE=''
U_NL_LANGINFO_CODESET=''
U_OVERRIDE_CXX_ALLOCATION=''
U_TIMEZONE=''
U_TZNAME=''
U_TZSET=''
UCLN_NO_AUTO_CLEANUP=''
UCONFIG_CFLAGS=''
UCONFIG_CPPFLAGS=''
UCONFIG_CXXFLAGS=''
UNICODE_VERSION='15.0'
VERSION='73.1'

## ----------- ##
## confdefs.h. ##
## ----------- ##

/* confdefs.h */
#define PACKAGE_NAME "ICU"
#define PACKAGE_TARNAME "International Components for Unicode"
#define PACKAGE_VERSION "73.1"
#define PACKAGE_STRING "ICU 73.1"
#define PACKAGE_BUGREPORT "http://icu-project.org/bugs"
#define PACKAGE_URL "http://icu-project.org"

configure: exit 77

См. `config.log' для более подробной информации. Что сообщает вам config.log?

drescherjm 08.06.2023 16:45

Вы сделали этот шаг: C:\Program Files (x86)\Microsoft Visual Studio 14\VC\bin\x86_amd64\vcvarsx86_amd64.bat Путь будет другим для VS2022: "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsamd64_x86.bat‌​"

drescherjm 08.06.2023 16:49
./configure: line 3097: cl: command not found похоже, проблема в том, что компилятор msvc не найден. Я считаю, что мой второй комментарий очень актуален. Похоже, вы не выполнили скрипт vcvarsamd64_x86.bat, который устанавливает переменные среды, позволяющие найти компилятор.
drescherjm 08.06.2023 17:01

Поскольку вы используете powershell вместо cmd.exe, этот вопрос может быть реальной проблемой: https://stackoverflow.com/questions/2124753/how-can-i-use-po‌ sual-studio-command-‌​prompt

drescherjm 08.06.2023 17:04

@drescherjm Спасибо! Кажется, он собран и установлен, хотя я не знаю, как использовать библиотеку в моем проекте VS. using icu::UnicodeString; и тому подобное не работает. Как и include <utypes.h> и тому подобное. Я все еще новичок, поэтому, возможно, я просто не понимаю, как работает использование библиотек. (Я привык к python, где установка чрезвычайно упрощена, как вы, наверное, знаете.)

LeaG 08.06.2023 18:29

Я ожидаю, что это то же самое, что и любая другая библиотека. Добавьте записи для своего "C/C++->General->Additional Include Directories" и добавьте необходимые библиотеки в свой Linker->Input, также помните, что конфигурации msvc (выпуск, отладка ...) являются отдельными, и обычно существуют разные библиотеки для отладки и выпуска, потому что эти 2 конфигурации несовместимы друг с другом.

drescherjm 08.06.2023 18:45

@drescherjm Я сделал это (imgur.com/a/17QbxsV), хотя я все еще не могу использовать библиотеку.

LeaG 08.06.2023 20:40

Очень странно иметь одну и ту же папку для «Дополнительных каталогов включения» и «Дополнительных каталогов библиотек». Я не уверен, что это правильно.

drescherjm 08.06.2023 20:43

@drescherjm Хорошо, я только что понял, что vcpkg может сделать это за меня, возможно, я раньше ошибся. Кроме того, в руководстве пользователя об этом вообще не упоминается, так что это бесполезно. Во всяком случае, это исправлено, так что все в порядке.

LeaG 08.06.2023 21:10

Вопреки опубликованному ответу, здесь нет причин привлекать Cygwin - ICU поставляется с Windows уже несколько лет ... Если вы используете VS, в Windows вам нечего собирать или устанавливать; просто включите заголовок и добавьте icu.lib к входным данным компоновщика.

ildjarn 11.06.2023 08:12
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
10
60
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

ICU уже доступен в виде пакета Cygwin

Смотрите содержимое последних пакетов разработки
https://cygwin.com/packages/x86_64/libicu-devel/libicu-devel-72.1-1

Нет причин смешивать C++ Visual Studio 2022 с Cygwin и, вероятно, это громоздко (я не использую Visual Studio).

В Cygwin уже есть все необходимые пакеты для разработки:

gcc-ядро
gcc-С++
сделать
cmake
..

и многое другое. Полный список смотрите на
https://cygwin.com/packages/package_list.html

Другие вопросы по теме