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

undefined reference to the library because of wrong Makefile syntax?

本文关键字:未定义 引用 语法 Makefile 错误 于错误      更新时间:2023-10-16

我安装了boost并创建了一个make文件,它将把我的静态boost库链接到主程序,这里是包含boost库的Makefile的快照(请向下滚动):

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: undefined reference toboost::系统:generic_category ()

为了解决这个问题,我将-lboostrongystem-mt移到编译器的命令行,如下所示:
all : main
    $(CC) $(LIBRARY_PATH) $(OBJECTS) -lboost_system-mt -o $(APPLICATION)

当我这样做时,它工作得很好,但我希望我的LIBRARY_PATH在一个地方,而不是在命令行上。如何解决LIBRARY_PATH变量使其工作?

使其运行: (CC) (LIBRARY_PATH)美元(对象)- o美元(应用程序)

库的顺序很重要,在g++中,库是从右向左读取的,这就是命令行工作的原因。我会尝试这样写

   $(CC) $(OBJECTS) $(LIBRARY_PATH)  -o $(APPLICATION)

如果这还不够,请尝试在LIBRARY_PATH中对库进行排序,这样依赖较少的库在右边,依赖较多的库在左边。