OS X:boost ++ regex在静态和动态链接版本之间发生冲突 - > EXC_BAD_ACCESS

Jan*_*gel 5 c++ boost dynamic-linking static-linking

我有一个OS X包,静态链接boost ++ regex库.这个包被加载到一个主机应用程序中,该主机应用程序本身加载了一个dylib,它包含另一个版本的boost ++ regex.

当我尝试在我的包中创建一个正则表达式时:

regex expr(exprString, icase);
Run Code Online (Sandbox Code Playgroud)

我遇到了崩溃:

例外类型:EXC_BAD_ACCESS(SIGSEGV)

例外代码:EXC_I386_GPFLT

调用堆栈显示我的bundle试图调用boost :: re_detail :: basic_regex_parser而不是来自我的bundle的静态链接的boost版本,而是来自主机应用程序的boost版本.

调用堆栈:

0   libProToolsInterplayOption.dylib    0x0000000114c06c9f boost::re_detail::basic_regex_parser<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::parse_extended() + 15
1   com.my_bundle.AAX   0x0000000125f802af boost::re_detail::basic_regex_parser<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::parse(char const*, char const*, unsigned int) + 575
2   com.my_bundle.AAX   0x0000000125f6f412 boost::re_detail::basic_regex_implementation<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::assign(char const*, char const*, unsigned int) + 130
3   com.my_bundle.AAX   0x0000000125f6f217 boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::do_assign(char const*, char const*, unsigned int) + 487
4   com.my_bundle.AAX   0x0000000125dd027b boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::assign(char const*, char const*, unsigned int) + 43 (basic_regex.hpp:380)
5   com.my_bundle.AAX   0x0000000125dd0243 boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >& boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::assign<std::char_traits<char>, std::allocator<char> >(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int) + 99 (basic_regex.hpp:418)
6   com.my_bundle.AAX   0x0000000125dd0173 boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::basic_regex<std::char_traits<char>, std::allocator<char> >(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int) + 51 (basic_regex.hpp:393)
7   com.my_bundle.AAX   0x0000000125dce783 boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::basic_regex<std::char_traits<char>, std::allocator<char> >(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int) + 35 (basic_regex.hpp:394)
Run Code Online (Sandbox Code Playgroud)

这会产生EXC_BAD_ACCESS.

如何确保我的捆绑包仅使用静态链接版本的boost来进行所有函数调用?

注意:如果加载我的bundle的主机应用程序正在使用boost或正在加载哪个版本的boost,我无法控制.

任何帮助赞赏.谢谢