我正在尝试构建一个使用colladadom
的工具,但我收到链接器错误。这是我的makefile
CXXFLAGS = -Wall -fPIC -g -t
OBJECTS = mesher.o oar.o primitive.o assigner.o meshmerizer.o primmesher.o colladifier.o main.o
LIBS = -I/opt/local/include -L/opt/local/lib -lboost_system -lboost_filesystem - lcollada14dom
default: all
all: $(OBJECTS)
$(CXX) $(CXXFLAGS) -o oarcoll $^ $(LIBS)
main.o : src/meshmerizer.h src/primmesher.h src/main.cpp
$(CXX) $(CXXFLAGS) -c $^
colladifier.o : src/colladifier.cpp
$(CXX) $(CXXFLAGS) -c $^
assigner.o : lib/assigner.cpp
$(CXX) $(CXXFLAGS) -c $^
primitive.o : lib/assigner.h src/utils.h src/prim_enum.h src/primitive.cpp
$(CXX) $(CXXFLAGS) -c $^
mesher.o : src/mesher.cpp
$(CXX) $(CXXFLAGS) -c $^
oar.o : src/oar.cpp
$(CXX) $(CXXFLAGS) -c $^
primmesher.o : src/primmesher.cpp
$(CXX) $(CXXFLAGS) -c $^
meshmerizer.o : src/meshmerizer.cpp src/primmesher.h
$(CXX) $(CXXFLAGS) -c $^
clean:
rm -f oarcoll main.o $(OBJECTS) *~
当我编译时,我得到了这个结果:
Undefined symbols for architecture x86_64:
"boost::system::generic_category()", referenced from:
__static_initialization_and_destruction_0(int, int)in colladifier.o
__static_initialization_and_destruction_0(int, int)in main.o
"boost::system::system_category()", referenced from:
__static_initialization_and_destruction_0(int, int)in colladifier.o
__static_initialization_and_destruction_0(int, int)in main.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
make: *** [all] Error 1
如果我在一行中完成所有操作并且不生成.o文件并在以后链接它们,我可以编译没有问题。即这个:
g++ domTest.cc -I/opt/local/include -L/opt/local/lib -lboost_system -lcollada15dom -o domTest
在同一台机器上正常工作。
我在libboost_system.dylib上运行nm,并且未定义的符号出现在转储中。
还有其他多个与此类似的线程,我已经看过它们并尝试了解决方案,但它仍然不适用于我。
有什么想法吗?