Отсутствует усиление символа регулярного выражения ICU во время соединения на MacOS с brew - PullRequest
0 голосов
/ 05 мая 2018

Я изменил свои регулярные выражения для использования библиотеки ICU и возникли проблемы со связью в OSX. В частности, у меня есть один неопределенный символ:

Undefined symbols for architecture x86_64:
  "boost::basic_regex<int, boost::icu_regex_traits>::do_assign(int const*, int const*, unsigned int)", referenced from:

У меня есть соответствующие библиотеки ссылок: -lboost_regex -licui18n -licuuc -licudata.

Я использовал brew для удаления и переустановки icu4c и boost. Я проверил библиотеки в нужном месте. Я также проверил, что второй библиотеки boost_regex_icu нет (не нашел).

Я использую scons как систему сборки, и она нашла все библиотеки. Заголовки также правильны, так как код компилируется правильно, но завершается ошибкой на этапе компоновки. Любопытно, что отсутствует только один этот символ, а не остальная часть библиотеки Boost Regex / icu.

Что я могу делать не так?


Моя полная ссылка: g++ -o build/libleaf_lang.dylib -rpath @executable_path -install_name @rpath/libleaf_lang.dylib -dynamiclib build/lang/assign_statement.os build/lang/cerr.os build/lang/class_typer.os build/lang/context.os build/lang/conversion_applicator.os build/lang/declaration.os build/lang/do_statement.os build/lang/dump.os build/lang/error_statement.os build/lang/expression.os build/lang/expression_statement.os build/lang/expression_visitor.os build/lang/fail_statement.os build/lang/for_statement.os build/lang/import_statement.os build/lang/init_statement.os build/lang/intr_type.os build/lang/loop_flow_statement.os build/lang/module.os build/lang/module_loader.os build/lang/noop_statement.os build/lang/return_statement.os build/lang/scope.os build/lang/scope_ref.os build/lang/serial.os build/lang/serial_expression.os build/lang/serial_type.os build/lang/statement_block.os build/lang/statement.os build/lang/statement_importer.os build/lang/statement_visitor.os build/lang/type_converter.os build/lang/type_identifier.os build/lang/type_manager.os build/lang/typer.os build/lang/type_ref.os build/lang/type_spec.os build/lang/typedef_statement.os build/lang/var_statement.os build/lang/expression_typer/builtin.os build/lang/expression_typer/common.os build/lang/expression_typer/fields.os build/lang/expression_typer/funccall.os build/lang/expression_typer/funcdefn.os build/lang/expression_typer/funccall_ctor.os build/lang/expression_typer/funccall_type.os build/parser/intr_type_parser.os build/parser/node_parser.os build/parser/node_converter.os build/parser/dump.os build/parser/source.os build/platform/platform.os build/platform/gnu_linux_x86_64.os -Lbuild/build/lib -Lsrc/build/lib -L/usr/local/Cellar/boost/1.67.0_1/lib -Lbuild -Lsrc -L/usr/local/Cellar/gmp/6.1.2/lib -lboost_unit_test_framework -lboost_program_options -lboost_regex -lgmp -lgmpxx -lboost_filesystem -lboost_system -lyaml-cpp -licui18n -licuuc -licudata -lleaf_util

Пакет варева:

  • повышение: стабильное 1.67.0 (в бутылках), ГОЛОВА
  • icu4c: стабильный 61,1 (в бутылках), ГОЛОВА [только для бочонков]

1 Ответ

0 голосов
/ 05 мая 2018

Буст-пакеты Brew по умолчанию не создаются с поддержкой icu4c. Они должны быть установлены как:

brew install boost --with-icu4c

Или, если уже установлено:

brew reinstall boost --with-icu4c

Будьте терпеливы, когда надстройка компилируется, так как в этом случае не используется стандартный двоичный файл.

В списках рассылки / отчетах об ошибках есть некоторые примечания, которые icu4c должен обнаруживать во время установки boost, но похоже, что это не так. Заказ, который я установил icu4c / boost, не имел значения. Только вышеприведенный флаг, казалось, помог.

...