我安装了boost并创建了一个make文件,它将我的静态boost库链接到主程序,这里是Makefile的快照,包括boost库(请向下滚动):
LIBRARY_PATH="-L/usr/lib \
-lboost_chrono-mt \
-lboost_date_time-mt \
-lboost_filesystem-mt \
-lboost_graph-mt \
-lboost_graph_parallel-mt \
-lboost_iostreams-mt \
-lboost_locale-mt \
-lboost_math_c99f-mt \
-lboost_math_c99l-mt \
-lboost_math_c99-mt \
-lboost_math_tr1f-mt \
-lboost_math_tr1l-mt \
-lboost_math_tr1-mt \
-lboost_mpi-mt \
-lboost_mpi_python-mt-py26 \
-lboost_mpi_python-mt-py27 \
-lboost_mpi_python-mt-py32 \
-lboost_prg_exec_monitor-mt \
-lboost_program_options-mt \
-lboost_python-mt-py26 \
-lboost_python-mt-py27 \
-lboost_python-mt-py32 \
-lboost_random-mt \
-lboost_regex-mt \
-lboost_serialization-mt \
-lboost_signals-mt \
-lboost_system-mt \
-lboost_test_exec_monitor-mt \
-lboost_thread-mt \
-lboost_timer-mt \
-lboost_unit_test_framework-mt \
-lboost_wave-mt \
-lboost_wserialization-mt"
all : main
$(CC) $(LIBRARY_PATH) $(OBJECTS) -o $(APPLICATION)
运行构建时出现错误信息:
/usr/include/boost/system/error_code.hpp:214:未定义的引用 `升压::系统:: generic_category()'
为了解决这个问题,我将 -lboost_system-mt 移动到编译器的命令行,如下所示:
all : main
$(CC) $(LIBRARY_PATH) $(OBJECTS) -lboost_system-mt -o $(APPLICATION)
当我这样做时它工作正常但我希望我的 LIBRARY_PATH 在一个地方而不是在命令行上。 如何解决LIBRARY_PATH变量才能使其工作?
这样就会运行: $(CC)$(LIBRARY_PATH)$(OBJECTS)-o $(APPLICATION)
答案 0 :(得分:1)
库的顺序很重要并且在g ++库中从右到左阅读,这就是命令行工作的原因。我会尝试做类似
的事情 $(CC) $(OBJECTS) $(LIBRARY_PATH) -o $(APPLICATION)
如果这还不够,请尝试对LIBRARY_PATH中的库进行排序,使得依赖性较小的库位于右侧,具有更多依赖性的库位于左侧。