由于Makefile语法错误,未定义对库的引用?

时间:2014-07-06 00:01:24

标签: c++ boost makefile

我安装了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)

1 个答案:

答案 0 :(得分:1)

库的顺序很重要并且在g ++库中从右到左阅读,这就是命令行工作的原因。我会尝试做类似

的事情
   $(CC) $(OBJECTS) $(LIBRARY_PATH)  -o $(APPLICATION)

如果这还不够,请尝试对LIBRARY_PATH中的库进行排序,使得依赖性较小的库位于右侧,具有更多依赖性的库位于左侧。