./configure
我是 Ubuntu 新手,正在尝试在其上编译 C++ 代码。该代码使用 2 个依赖项(Cairographics 和 FFTW3)。我已使用和目录中安装了它们make
( 按照此处给出的说明进行操作)make install
$HOME/prefix/
如何安装 Cairo 1.8.10)
现在我在这个目录中有 4 个文件夹,分别是bin
、include
和lib
share
代码的 make 文件需要指定依赖项的目录。就像这样
INC := -I$HOME/prefic/include
LIB := -L$HOME/prefic/lib
当我编译代码时,我将环境变量设置为
export PKG_CONFIG_PATH=$HOME/prefic/lib/pkgconfig
export LD_LIBRARY_PATH=$HOME/prefic/lib
然后使用 make。链接器给出“未定义的引用“来自 Cairo 或 FFTW 内部的函数
我使用的 make 文件
###################### user-configuration section #######################
INC := -I/opt/local/include
LIB := -L/opt/local/lib
# 32 bit
#MARCH := -m32
# 64 bit
MARCH := -m64
#########################################################################
CXX := g++
CXXFLAGS := -Wall -fopenmp
OPTFLAGS := -O3 $(MARCH)
LIB += -lfftw3 -lm -lcairo
CXXFILES := main.cpp fileio.cpp measurements.cpp spectralanalysis.cpp
OBJS := $(patsubst %.cpp, %.o, $(CXXFILES))
TARGET := psa
.PHONY: all clean cleanall rebuild
all: $(TARGET)
$(TARGET): $(OBJS)
@$(CXX) $(CXXFLAGS) $(OPTFLAGS) -o $(TARGET) $(LIB) $(OBJS)
%.o : %.cpp
@$(CXX) $(CXXFLAGS) $(OPTFLAGS) $(INC) -o $@ -c $<
clean:
rm -rf *.o
cleanall: clean
rm -rf $(TARGET)
rebuild:
$(MAKE) cleanall
$(MAKE) all
我认为我没有正确链接代码和依赖项。有人能帮忙吗?
我正在尝试编译的 psa 代码在这里http://code.google.com/p/psa/downloads/list
答案1
我认为您需要将库移至命令行末尾(在Makefile
:$(LIB)
之后的位置)。默认情况下,$(OBJS)
链接器标志处于激活状态--as-needed
自 Ubuntu 11.10 起. 这使得链接器对命令行上库的顺序很敏感。
顺便说一句:我不知道您是否已经知道这一点,但您不需要从源代码安装 Cairo 和 FFTW3。
您可以使用包管理系统安装依赖项:
sudo apt-get install libcairo2-dev libfftw3-dev
然后你必须更改以下两行Makefile
:
INC := -I/usr/include
LIB := -L/usr/lib