在使用brew的MacOS上链接时缺少提升ICU正则表达式符号

时间:2018-05-05 05:23:58

标签: c++ macos boost homebrew icu

我已经改变了我的正则表达式以使用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作为构建系统,并且找到了所有库。由于代码编译正确,标题也是正确的,但在链接阶段失败。奇怪的是,只有这一个缺失的符号,而不是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

Brew包:

  • 提升:稳定1.67.0(瓶装),HEAD
  • icu4c:稳定61.1(瓶装),HEAD [仅限keg]

1 个答案:

答案 0 :(得分:1)

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

brew install boost --with-icu4c

或者如果已安装:

brew reinstall boost --with-icu4c

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

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