我试图使用 Boost.Tokenizer 库。在我的PROG.cpp
中,我有以下内容:
#include <boost/tokenizer.hpp>
我Makefile
最初是这样的
CXX = g++-4.8
CXXFLAGS = ## some irrelevant flags
LDFLAGS = ## some irrelevant flags
SOURCES = PROG.cpp
OBJECTS = $(SOURCES:.cpp=.o)
TARGETS = PROG
$(TARGETS) : $(OBJECTS)
$(CXX) $(CXXFLAGS) -o $@ $^ $(LDFLAGS)
## other targets
它不会编译,因为boost/tokenizer.hpp
找不到:
fatal error: boost/tokenizer.hpp: No such file or directory
然后我手动将 boost 包含路径添加到CXXFLAGS
:
-I/opt/local/include/
(这是来自 MacPorts 的路径。)
然后我尝试包含 Tokenizer 库,但在/opt/local/lib/
我有libboost_atomic-mt.dylib
,libboost_chrono-mt.dylib
等,但没有像tokenizer
. 我当时比较迷茫。我想这仍然行不通,因为图书馆没有链接。令人惊讶的是,该程序完美地构建、链接和运行。
所以我现在真的很困惑。这里有一些问题:
(1) 我没有明确链接到 boost,所以链接器将 boost 视为标准库?
(2) 如果 boost 被视为标准,为什么标题不是标准的?
(3) 为什么有libboost_atomic-mt.dylib
,libboost_chrono-mt.dylib
等而没有tokenizer
? tokenizer
属于哪个动态库?
我对g++
链接机制不是很熟悉;说到 boost,这是我第一个使用 boost 的程序。所以我真的很感激详细的解释。提前致谢!
作为参考,这是我提取的内容gcc -print-search-dirs
:
install: /usr/gcc-4.8.0/lib/gcc/x86_64-apple-darwin12.3.0/4.8.0/
programs: =/usr/gcc-4.8.0/libexec/gcc/x86_64-apple-darwin12.3.0/4.8.0/:/usr/gcc-4.8.0/libexec/gcc/x86_64-apple-darwin12.3.0/4.8.0/:/usr/gcc-4.8.0/libexec/gcc/x86_64-apple-darwin12.3.0/:/usr/gcc-4.8.0/lib/gcc/x86_64-apple-darwin12.3.0/4.8.0/:/usr/gcc-4.8.0/lib/gcc/x86_64-apple-darwin12.3.0/:/usr/gcc-4.8.0/lib/gcc/x86_64-apple-darwin12.3.0/4.8.0/../../../../x86_64-apple-darwin12.3.0/bin/x86_64-apple-darwin12.3.0/4.8.0/:/usr/gcc-4.8.0/lib/gcc/x86_64-apple-darwin12.3.0/4.8.0/../../../../x86_64-apple-darwin12.3.0/bin/
libraries: =/usr/gcc-4.8.0/lib/gcc/x86_64-apple-darwin12.3.0/4.8.0/:/usr/gcc-4.8.0/lib/gcc/x86_64-apple-darwin12.3.0/4.8.0/../../../../x86_64-apple-darwin12.3.0/lib/x86_64-apple-darwin12.3.0/4.8.0/:/usr/gcc-4.8.0/lib/gcc/x86_64-apple-darwin12.3.0/4.8.0/../../../../x86_64-apple-darwin12.3.0/lib/:/usr/gcc-4.8.0/lib/gcc/x86_64-apple-darwin12.3.0/4.8.0/../../../x86_64-apple-darwin12.3.0/4.8.0/:/usr/gcc-4.8.0/lib/gcc/x86_64-apple-darwin12.3.0/4.8.0/../../../:/lib/x86_64-apple-darwin12.3.0/4.8.0/:/lib/:/usr/lib/x86_64-apple-darwin12.3.0/4.8.0/:/usr/lib/