Compilando o C ++ no Ubuntu (psa - Point Set Analysis)

2

Sou novo no Ubuntu e estou tentando compilar um código C ++ nele. O código usa 2 dependências (Cairographics e FFTW3). Instalei ambos usando ./configure , make e make install no diretório $HOME/prefix/ (seguindo as instruções dadas aqui Como instalar o Cairo 1.8.10 )

Agora eu tenho neste diretório 4 pastas, ou seja, bin , include , lib e share

O arquivo make do código requer a especificação do diretório das dependências. Assim

INC := -I$HOME/prefic/include
LIB := -L$HOME/prefic/lib

Quando eu compilo o código, eu configuro as variáveis de ambiente como

export PKG_CONFIG_PATH=$HOME/prefic/lib/pkgconfig
export LD_LIBRARY_PATH=$HOME/prefic/lib

e, em seguida, use o make. Linker dá " referência indefinida para " funções de dentro do Cairo ou FFTW

o arquivo de make que eu uso

###################### 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

Acho que não vinculo o código com as dependências corretamente. Alguém poderia ajudar por favor.

O código PSA que estou tentando compilar está aqui link

    
por Ahmed Hassen 18.08.2012 / 05:37

1 resposta

0

Acho que você precisa mover as bibliotecas para o final da linha de comando (em Makefile : place $(LIB) after $(OBJS) ). O sinalizador de vinculação --as-needed é ativado por padrão desde o Ubuntu 11.10 . Isso torna o vinculador sensível à ordem das bibliotecas na linha de comando.

A propósito: Eu não sei se você já sabe disso, mas você não precisa instalar o Cairo e o FFTW3 a partir do código-fonte.

Você pode instalar as dependências com o sistema de gerenciamento de pacotes:

sudo apt-get install libcairo2-dev libfftw3-dev

Depois, você precisa alterar as duas linhas a seguir no Makefile :

INC := -I/usr/include
LIB := -L/usr/lib
    
por Nimmermehr 18.08.2012 / 11:55