2013-08-26 3 views
1

Я хотел бы использовать библиотеку регулярных выражений подталкивания и создал очень короткую программу, чтобы проверить мой Makefileповышение Makefile на Mac OS X

#include <iostream> 
#include <boost/regex.hpp> 

using namespace std; 
using namespace boost; 

int main() { 

    regex exp("test"); 

    cout << "Hello World" << endl; 
} 

Вот мой Makefile (я получил повышение включает в себя из этой темы Including boost libraries in make files)

EXEC = main 
SOURCES = $(wildcard *.cpp) 
HEADERS = $(wildcard *.h*) 
OBJECTS = $(SOURCES:.cpp=.o) 

all: $(EXEC) 

main: $(OBJECTS) 
    g++ -L/usr/local/Cellar/boost/1.54.0/lib -lboost_filesystem-mt -lboost_thread-mt $(OBJECTS) -o $(EXEC) 

%.o: %.cpp $(HEADERS) 
    g++ -I/usr/local/Cellar/boost/1.54.0/include -c $< -o [email protected] 

clean: 
    rm -f $(EXEC) $(OBJECTS) 

Когда я компилирую мою программу на получить следующее сообщение об ошибке сообщение:

g++ -I/usr/local/Cellar/boost/1.54.0/include -c main.cpp -o main.o 
g++ -L/usr/local/Cellar/boost/1.54.0/lib -lboost_filesystem-mt -lboost_thread-mt main.o -o main 
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 
ld: symbol(s) not found for architecture x86_64 
collect2: ld returned 1 exit status 
make: *** [main] Error 1 

Что не хватает? Я установил boost с homebrew под Mac OS X 10.8.

+1

Может быть, стоит отметить, что реализация Яблока STL включает в себя C++ 11 [регулярные выражения STL] (http://www.cplusplus.com/reference/regex/). – zneak

ответ

3

Вы пропускаете ссылку на библиотеку boost_regex_mt

-lboost_filesystem-MT -lboost_thread-м

В вашем Makefile ...

main: $(OBJECTS) 
    g++ -L/usr/local/Cellar/boost/1.54.0/lib -lboost_regex-mt -lboost_filesystem-mt -lboost_thread-mt  $(OBJECTS) -o $(EXEC)