在带有brew的MacOS上链接时缺少增强ICU正则表达式符号

Missing boost ICU regex symbol at link time on MacOS with brew

本文关键字:增强 ICU 符号 正则表达式 链接 brew MacOS      更新时间:2023-10-16

我已经更改了我的正则表达式以使用 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 删除并重新安装了icu4cboost.我检查了库在正确的位置。我还检查了没有第二个boost_regex_icu库(没有找到(。

我使用scons作为构建系统,它找到了所有的库。标头也是正确的,因为代码编译正确,但在链接阶段失败。奇怪的是,缺少的只有一个符号,而不是增强正则表达式/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(瓶装(,头部[仅桶]

默认情况下,Brew 的 boost 包不是使用 icu4c 支持的。它们必须安装为:

brew install boost --with-icu4c

或者,如果已安装:

brew reinstall boost --with-icu4c

在 boost 编译时要耐心等待,因为这似乎不使用标准的二进制文件。

在邮件列表/错误报告中有一些注释,应该在 boost 的安装过程中检测到 icu4c,但似乎没有。我安装 icu4c/boost 的顺序没有区别。只有上面的标志似乎有所帮助。