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,我无法控制.
任何帮助赞赏.谢谢