在 Ubuntu 中编译 C++(psa - 点集分析)

在 Ubuntu 中编译 C++(psa - 点集分析)

./configure我是 Ubuntu 新手,正在尝试在其上编译 C++ 代码。该代码使用 2 个依赖项(Cairographics 和 FFTW3)。我已使用和目录中安装了它们make( 按照此处给出的说明进行操作)make install$HOME/prefix/如何安装 Cairo 1.8.10

现在我在这个目录中有 4 个文件夹,分别是binincludelibshare

代码的 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

相关内容