Я делаю текстовую игру, используя ICU для обработки игрового текста из файлов JSON с кодировкой UTF-8 на трех основных платформах ПК. Я могу скомпилировать и связать бинарный файл с CMake, ссылаясь на типы ICU, такие как UChar, UnicodeString и т. Д., И все работает правильно. Как ни странно, есть определенные заголовки, из которых я не могу получить доступ к каким-либо типам или функциям, не вызывая ошибки компоновщика «Неопределенные символы». В частности, заголовок «ustdio.h», из которого мне нужно получить доступ к файлам u_fopen(), u_fclose(), u_fgets() и т. Д., Для извлечения строк юникода из моих файлов JSON.Функции ICU ustdio.h: Неопределенные символы в Mac OS при построении с CMake
неопределенные символы для архитектуры x86_64: "_u_fclose_57", ссылочные от: FileReader :: Закрыть() в libsource.a (FileReader.cpp.o) "_u_fgets_57", ссылочные от: FileReader :: HasNextLine() в libsource.a (FileReader.cpp.o) FileReader :: NextLine() в libsource.a (FileReader.cpp.o) "_u_fopen_57", на который ссылаются: FileReader :: FileReader (std :: __ 1 :: basic_string, std :: __ 1 :: allocator>) в libsource.a (FileReader.cpp.o)
Я использую this CMake module file, чтобы найти файлы .h
и .dylib
. Из вывода CMake я знаю, что он связывается с /usr/local/lib/libicuuc.dylib
, но, глядя в эту папку, я также вижу множество других связанных с ICU dylib. Другой программист поручил мне проверить, действительно ли символы, которые я ищу, в dylib
, используя nm
, и я вижу в списке символов, что они не являются. Могу ли я предположить, что эти символы определены в одном из других файлов dylib
? Если они есть, и я нахожу правильный dylib
, как мне изменить FindICU.cmake
, чтобы связать его с дополнительной динамической библиотекой? Модуль кажется мне очень тупым, и я не знаю, где бы я его изменил, чтобы исправить это.
Вместо этого используйте 'find_package (ICU COMPONENTS uc io REQUIRED)'. – julp