【发布时间】:2014-11-24 00:44:53
【问题描述】:
我正在使用 boost 框架测试应用程序。为此,我遵循了
github 链接并构建框架并相应地插入。我将项目属性设置如下
Language Dialect set to C++11 [-std=c++11]
C++ Standard Library set to libc++ (LLVM C++ standard library with C++11 support)
OS X deployment target 10.10
为了避免这个错误
我删除关键字寄存器 并按如下方式更改了我的代码(请找到以下附加代码的#pragma 标记),但对我没有任何作用。删除注册关键字后,我没有收到已弃用的警告。 但是无论有没有那个警告,我都会遇到链接器错误。 请帮助我解决这些错误。
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-register"
#pragma clang diagnostic pop
#include <boost/regex.hpp>
#include <iostream>
#include <string>
int main()
{
std::string line;
boost::regex pat( "^Subject: (Re: |Aw: )*(.*)" );
while (std::cin)
{
std::getline(std::cin, line);
boost::smatch matches;
if (boost::regex_match(line, matches, pat))
std::cout << matches[2] << std::endl;
}
}
错误日志
Undefined symbols for architecture x86_64:
"boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::do_assign(char const*, char const*, unsigned int)", referenced from:
boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::assign(char const*, char const*, unsigned int) in main.o
"boost::re_detail::get_mem_block()", referenced from:
boost::re_detail::perl_matcher<std::__1::__wrap_iter<char const*>, std::__1::allocator<boost::sub_match<std::__1::__wrap_iter<char const*> > >, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::extend_stack() in main.o
boost::re_detail::save_state_init::save_state_init(boost::re_detail::saved_state**, boost::re_detail::saved_state**) in main.o
"boost::re_detail::put_mem_block(void*)", referenced from:
boost::re_detail::save_state_init::~save_state_init() in main.o
boost::re_detail::perl_matcher<std::__1::__wrap_iter<char const*>, std::__1::allocator<boost::sub_match<std::__1::__wrap_iter<char const*> > >, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::unwind_extra_block(bool) in main.o
"boost::re_detail::verify_options(unsigned int, boost::regex_constants::_match_flags)", referenced from:
boost::re_detail::perl_matcher<std::__1::__wrap_iter<char const*>, std::__1::allocator<boost::sub_match<std::__1::__wrap_iter<char const*> > >, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::match_imp() in main.o
"boost::re_detail::raise_runtime_error(std::runtime_error const&)", referenced from:
void boost::re_detail::raise_error<boost::regex_traits_wrapper<boost::regex_traits<char, boost::cpp_regex_traits<char> > > >(boost::regex_traits_wrapper<boost::regex_traits<char, boost::cpp_regex_traits<char> > > const&, boost::regex_constants::error_type) in main.o
"boost::re_detail::get_default_error_string(boost::regex_constants::error_type)", referenced from:
boost::re_detail::cpp_regex_traits_implementation<char>::error_string(boost::regex_constants::error_type) const in main.o
"boost::re_detail::cpp_regex_traits_implementation<char>::transform_primary(char const*, char const*) const", referenced from:
boost::cpp_regex_traits<char>::transform_primary(char const*, char const*) const in main.o
"boost::re_detail::cpp_regex_traits_implementation<char>::transform(char const*, char const*) const", referenced from:
boost::cpp_regex_traits<char>::transform(char const*, char const*) const in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
【问题讨论】:
-
您能否将错误消息的实际文本添加到您的问题中?您的屏幕快照已截断了文本。
-
您在标题中提到的错误只是一个警告。真正的错误是 basic_regex 是一个未定义的符号。您没有与图书馆链接。
-
@ThomasMatthews 我确实请找到已编辑的问题
-
@Dave 我认为这些错误是由于该警告而出现的,这就是为什么我已经发布了该错误,无论如何我已经更正了,谢谢你 :)
-
警告不太可能与错误有关(尽管我不敢说这是不可能的)。您确定要链接到 boost regex 库吗?检查您的链接器调用,或者更好地发布它。
标签: c++ xcode boost osx-yosemite