【问题标题】:undefined reference to the library because of wrong Makefile syntax?由于错误的 Makefile 语法,未定义对库的引用?
【发布时间】:2014-08-26 19:28:58
【问题描述】:

我安装了 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: 未定义的引用 `boost::system::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)

【问题讨论】:

    标签: c++ boost makefile


    【解决方案1】:

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

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

    如果这还不够,请尝试对 LIBRARY_PATH 中的库进行排序,使依赖项较少的库位于右侧,而依赖项较多的库位于左侧。

    【讨论】:

    • 排序 30 个库 huh ^^,有 googolion 的可能性,顺便说一句,我把我的 -lboost_signals-mt 放回命令行,它不再工作了:(跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-03
    • 1970-01-01
    • 1970-01-01
    • 2018-05-25
    • 2021-06-24
    相关资源
    最近更新 更多