Я новичок в 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
Вы сделали этот шаг: 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"
./configure: line 3097: cl: command not found похоже, проблема в том, что компилятор msvc не найден. Я считаю, что мой второй комментарий очень актуален. Похоже, вы не выполнили скрипт vcvarsamd64_x86.bat, который устанавливает переменные среды, позволяющие найти компилятор.
Поскольку вы используете powershell вместо cmd.exe, этот вопрос может быть реальной проблемой: https://stackoverflow.com/questions/2124753/how-can-i-use-po sual-studio-command-prompt
@drescherjm Спасибо! Кажется, он собран и установлен, хотя я не знаю, как использовать библиотеку в моем проекте VS. using icu::UnicodeString; и тому подобное не работает. Как и include <utypes.h> и тому подобное. Я все еще новичок, поэтому, возможно, я просто не понимаю, как работает использование библиотек. (Я привык к python, где установка чрезвычайно упрощена, как вы, наверное, знаете.)
Я ожидаю, что это то же самое, что и любая другая библиотека. Добавьте записи для своего "C/C++->General->Additional Include Directories" и добавьте необходимые библиотеки в свой Linker->Input, также помните, что конфигурации msvc (выпуск, отладка ...) являются отдельными, и обычно существуют разные библиотеки для отладки и выпуска, потому что эти 2 конфигурации несовместимы друг с другом.
@drescherjm Я сделал это (imgur.com/a/17QbxsV), хотя я все еще не могу использовать библиотеку.
Очень странно иметь одну и ту же папку для «Дополнительных каталогов включения» и «Дополнительных каталогов библиотек». Я не уверен, что это правильно.
@drescherjm Хорошо, я только что понял, что vcpkg может сделать это за меня, возможно, я раньше ошибся. Кроме того, в руководстве пользователя об этом вообще не упоминается, так что это бесполезно. Во всяком случае, это исправлено, так что все в порядке.
Вопреки опубликованному ответу, здесь нет причин привлекать Cygwin - ICU поставляется с Windows уже несколько лет ... Если вы используете VS, в Windows вам нечего собирать или устанавливать; просто включите заголовок и добавьте icu.lib к входным данным компоновщика.





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
См. `config.log' для более подробной информации. Что сообщает вам config.log?