Я являюсь новым в Ubuntu и пытающийся скомпилировать код C++ его. Код использует 2 зависимости (Cairographics и FFTW3). Я установил их обоих использование ./configure
, make
и make install
в каталоге $HOME/prefix/
(следование инструкциям, данным здесь, Как установить Каир 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
и затем использование делает. Компоновщик дает "неопределенную ссылку на" функции из Каира или 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
Я думаю, что необходимо переместить библиотеки в конец командной строки (в Вашем Makefile
: место $(LIB)
после $(OBJS)
). Флаг компоновщика --as-needed
активируется значением по умолчанию начиная с Ubuntu 11.10 . Это делает компоновщика чувствительным к упорядочиванию библиотек по командной строке.
Между прочим: Я не знаю, знаете ли Вы уже, что, но не должны устанавливать Каир и FFTW3 из источника.
можно установить зависимости с системой управления пакета:
sudo apt-get install libcairo2-dev libfftw3-dev
Затем необходимо изменить следующие две строки в Makefile
:
INC := -I/usr/include
LIB := -L/usr/lib