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