linux - 无法使用 makefile 进行编译 - 未定义对 `boost::re_detail 的引用

标签 linux boost reference undefined linux-mint

我接到了一项任务,要改进一些代码的运行时间。唯一的问题是,我什至无法首先编译它以在我的机器上运行它。每次我尝试时,它都会在编译过程中的某处停止说:

"undefined reference to `boost::re_detail::put_mem_block(void*)' collect2: ld returned 1 exit status make: * [cpu] Error 1"

这是 makefile 的样子:

SHELL = /bin/bash

OBJECTS = main.o atom.o molecule.o charges.o pdb.o asa.o amino.o chain.o addition.o string_operation.o pdb_peptide.o protein_chain.o residue_atom.o chain_residue.o residue_contact.o atom_grid.o circles.o atom_space_calculations.o

OBJDIR = obj

VPATH = src:src/ext:$(OBJDIR)

CFLAGS = -O3 -Wall -lm -lboost_regex -L/usr/local/boost/lib


HDIRS = src,src/ext,src/qt_redistributable, usr/lib, usr/local/lib, usr/local/lib/include/boost, /usr/local/lib/lib/
IOPTS = $(addprefix -I, $(HDIRS))

cpu : $(addprefix $(OBJDIR)/, $(OBJECTS) $(CPUOBJS))
    g++ $(CFLAGS) -o mcpu $^ 

$(OBJDIR)/%.o : %.cpp
    g++ $(CFLAGS) $(IOPTS) -c $< -o $@

clean : 
    rm obj/*.o $(PROG)

我使用的是 Linux Mint x64,我已经尝试了所有我在谷歌上搜索到的东西。在 usr/local/lib 中安装了整个 boost 库(没有明显的原因,因为它没有帮助),尝试编辑 LD PATH(我是 Linux 的新手,我不知道是否正确)和很多东西,但这件事似乎没有通过。任何帮助表示赞赏。

最佳答案

当您链接您的程序时,您的 makefile 会出现一个问题。正如您在 these 中看到的那样questions对于 g++,链接时参数的顺序非常重要。您需要将库放在目标文件之后。一种简单的解决方法是将链接器标志 (LDFLAGS) 与编译器标志 (CFLAGS) 分开,然后将 LDFLAGS 放在 $^(您的目标文件)在链接命令中。

CFLAGS = -O3 -Wall 

LDFLAGS = -L/usr/local/boost/lib -lm -lboost_regex  

cpu : $(addprefix $(OBJDIR)/, $(OBJECTS) $(CPUOBJS))
        g++ $(CFLAGS) -o mcpu $^ $(LDFLAGS)

$(OBJDIR)/%.o : %.cpp
        g++ $(CFLAGS) $(IOPTS) -c $< -o $@

关于linux - 无法使用 makefile 进行编译 - 未定义对 `boost::re_detail 的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12507333/

相关文章:

c++ - Boost 二进制文件读取错误 unsupported version

检查消息队列是否存在

php - Linux 中的本地主机问题

c++ - 如何实现BOOST_TYPEOF?

c++ - 右值引用和左值引用作为参数的区别

c++ - SomeClass &a = *new SomeClass(...)

perl - perl 中的对象类名

python - Raspberry pi Jasper 语音识别无法正常工作

linux - tmux 不能与 ssh-agent 一起工作

c++ - 是否可以将成员初始化推迟到构造函数主体?