breakfastquay / rubberband

Official mirror of Rubber Band Library, an audio time-stretching and pitch-shifting library.
http://breakfastquay.com/rubberband/
GNU General Public License v2.0
566 stars 91 forks source link

Cannot build Rubber Band library with libsamplerate and libfftw3 installed #29

Closed Minabsapi closed 3 years ago

Minabsapi commented 4 years ago

OS: GNU/Linux Ubuntu 20.04 gcc version: (Ubuntu 9.3.0-10ubuntu2) 9.3.0

libsamplerate and libfftw3 have all been built and installed correctly, however I'm having a linking error at the make library phase:

g++ -DHAVE_LIBSAMPLERATE -DHAVE_FFTW3 -DFFTW_DOUBLE_ONLY -DNO_THREAD_CHECKS -DUSE_PTHREADS -DNO_TIMING -DNDEBUG -I. -Isrc -Irubberband -g -O2 -fPIC -Wall -I/usr/local/include -I/usr/local/include -I/usr/local/include -I/usr/local/include    -c -o src/rubberband-c.o src/rubberband-c.cpp
g++ -DHAVE_LIBSAMPLERATE -DHAVE_FFTW3 -DFFTW_DOUBLE_ONLY -DNO_THREAD_CHECKS -DUSE_PTHREADS -DNO_TIMING -DNDEBUG -I. -Isrc -Irubberband -g -O2 -fPIC -Wall -I/usr/local/include -I/usr/local/include -I/usr/local/include -I/usr/local/include    -c -o src/RubberBandStretcher.o src/RubberBandStretcher.cpp
g++ -DHAVE_LIBSAMPLERATE -DHAVE_FFTW3 -DFFTW_DOUBLE_ONLY -DNO_THREAD_CHECKS -DUSE_PTHREADS -DNO_TIMING -DNDEBUG -I. -Isrc -Irubberband -g -O2 -fPIC -Wall -I/usr/local/include -I/usr/local/include -I/usr/local/include -I/usr/local/include    -c -o src/StretcherProcess.o src/StretcherProcess.cpp
g++ -DHAVE_LIBSAMPLERATE -DHAVE_FFTW3 -DFFTW_DOUBLE_ONLY -DNO_THREAD_CHECKS -DUSE_PTHREADS -DNO_TIMING -DNDEBUG -I. -Isrc -Irubberband -g -O2 -fPIC -Wall -I/usr/local/include -I/usr/local/include -I/usr/local/include -I/usr/local/include    -c -o src/StretchCalculator.o src/StretchCalculator.cpp
g++ -DHAVE_LIBSAMPLERATE -DHAVE_FFTW3 -DFFTW_DOUBLE_ONLY -DNO_THREAD_CHECKS -DUSE_PTHREADS -DNO_TIMING -DNDEBUG -I. -Isrc -Irubberband -g -O2 -fPIC -Wall -I/usr/local/include -I/usr/local/include -I/usr/local/include -I/usr/local/include    -c -o src/base/Profiler.o src/base/Profiler.cpp
g++ -DHAVE_LIBSAMPLERATE -DHAVE_FFTW3 -DFFTW_DOUBLE_ONLY -DNO_THREAD_CHECKS -DUSE_PTHREADS -DNO_TIMING -DNDEBUG -I. -Isrc -Irubberband -g -O2 -fPIC -Wall -I/usr/local/include -I/usr/local/include -I/usr/local/include -I/usr/local/include    -c -o src/dsp/AudioCurveCalculator.o src/dsp/AudioCurveCalculator.cpp
g++ -DHAVE_LIBSAMPLERATE -DHAVE_FFTW3 -DFFTW_DOUBLE_ONLY -DNO_THREAD_CHECKS -DUSE_PTHREADS -DNO_TIMING -DNDEBUG -I. -Isrc -Irubberband -g -O2 -fPIC -Wall -I/usr/local/include -I/usr/local/include -I/usr/local/include -I/usr/local/include    -c -o src/audiocurves/CompoundAudioCurve.o src/audiocurves/CompoundAudioCurve.cpp
g++ -DHAVE_LIBSAMPLERATE -DHAVE_FFTW3 -DFFTW_DOUBLE_ONLY -DNO_THREAD_CHECKS -DUSE_PTHREADS -DNO_TIMING -DNDEBUG -I. -Isrc -Irubberband -g -O2 -fPIC -Wall -I/usr/local/include -I/usr/local/include -I/usr/local/include -I/usr/local/include    -c -o src/audiocurves/SpectralDifferenceAudioCurve.o src/audiocurves/SpectralDifferenceAudioCurve.cpp
g++ -DHAVE_LIBSAMPLERATE -DHAVE_FFTW3 -DFFTW_DOUBLE_ONLY -DNO_THREAD_CHECKS -DUSE_PTHREADS -DNO_TIMING -DNDEBUG -I. -Isrc -Irubberband -g -O2 -fPIC -Wall -I/usr/local/include -I/usr/local/include -I/usr/local/include -I/usr/local/include    -c -o src/audiocurves/HighFrequencyAudioCurve.o src/audiocurves/HighFrequencyAudioCurve.cpp
g++ -DHAVE_LIBSAMPLERATE -DHAVE_FFTW3 -DFFTW_DOUBLE_ONLY -DNO_THREAD_CHECKS -DUSE_PTHREADS -DNO_TIMING -DNDEBUG -I. -Isrc -Irubberband -g -O2 -fPIC -Wall -I/usr/local/include -I/usr/local/include -I/usr/local/include -I/usr/local/include    -c -o src/audiocurves/SilentAudioCurve.o src/audiocurves/SilentAudioCurve.cpp
g++ -DHAVE_LIBSAMPLERATE -DHAVE_FFTW3 -DFFTW_DOUBLE_ONLY -DNO_THREAD_CHECKS -DUSE_PTHREADS -DNO_TIMING -DNDEBUG -I. -Isrc -Irubberband -g -O2 -fPIC -Wall -I/usr/local/include -I/usr/local/include -I/usr/local/include -I/usr/local/include    -c -o src/audiocurves/ConstantAudioCurve.o src/audiocurves/ConstantAudioCurve.cpp
g++ -DHAVE_LIBSAMPLERATE -DHAVE_FFTW3 -DFFTW_DOUBLE_ONLY -DNO_THREAD_CHECKS -DUSE_PTHREADS -DNO_TIMING -DNDEBUG -I. -Isrc -Irubberband -g -O2 -fPIC -Wall -I/usr/local/include -I/usr/local/include -I/usr/local/include -I/usr/local/include    -c -o src/audiocurves/PercussiveAudioCurve.o src/audiocurves/PercussiveAudioCurve.cpp
g++ -DHAVE_LIBSAMPLERATE -DHAVE_FFTW3 -DFFTW_DOUBLE_ONLY -DNO_THREAD_CHECKS -DUSE_PTHREADS -DNO_TIMING -DNDEBUG -I. -Isrc -Irubberband -g -O2 -fPIC -Wall -I/usr/local/include -I/usr/local/include -I/usr/local/include -I/usr/local/include    -c -o src/dsp/Resampler.o src/dsp/Resampler.cpp
g++ -DHAVE_LIBSAMPLERATE -DHAVE_FFTW3 -DFFTW_DOUBLE_ONLY -DNO_THREAD_CHECKS -DUSE_PTHREADS -DNO_TIMING -DNDEBUG -I. -Isrc -Irubberband -g -O2 -fPIC -Wall -I/usr/local/include -I/usr/local/include -I/usr/local/include -I/usr/local/include    -c -o src/dsp/FFT.o src/dsp/FFT.cpp
g++ -DHAVE_LIBSAMPLERATE -DHAVE_FFTW3 -DFFTW_DOUBLE_ONLY -DNO_THREAD_CHECKS -DUSE_PTHREADS -DNO_TIMING -DNDEBUG -I. -Isrc -Irubberband -g -O2 -fPIC -Wall -I/usr/local/include -I/usr/local/include -I/usr/local/include -I/usr/local/include    -c -o src/system/Allocators.o src/system/Allocators.cpp
g++ -DHAVE_LIBSAMPLERATE -DHAVE_FFTW3 -DFFTW_DOUBLE_ONLY -DNO_THREAD_CHECKS -DUSE_PTHREADS -DNO_TIMING -DNDEBUG -I. -Isrc -Irubberband -g -O2 -fPIC -Wall -I/usr/local/include -I/usr/local/include -I/usr/local/include -I/usr/local/include    -c -o src/system/sysutils.o src/system/sysutils.cpp
g++ -DHAVE_LIBSAMPLERATE -DHAVE_FFTW3 -DFFTW_DOUBLE_ONLY -DNO_THREAD_CHECKS -DUSE_PTHREADS -DNO_TIMING -DNDEBUG -I. -Isrc -Irubberband -g -O2 -fPIC -Wall -I/usr/local/include -I/usr/local/include -I/usr/local/include -I/usr/local/include    -c -o src/system/Thread.o src/system/Thread.cpp
g++ -DHAVE_LIBSAMPLERATE -DHAVE_FFTW3 -DFFTW_DOUBLE_ONLY -DNO_THREAD_CHECKS -DUSE_PTHREADS -DNO_TIMING -DNDEBUG -I. -Isrc -Irubberband -g -O2 -fPIC -Wall -I/usr/local/include -I/usr/local/include -I/usr/local/include -I/usr/local/include    -c -o src/StretcherChannelData.o src/StretcherChannelData.cpp
g++ -DHAVE_LIBSAMPLERATE -DHAVE_FFTW3 -DFFTW_DOUBLE_ONLY -DNO_THREAD_CHECKS -DUSE_PTHREADS -DNO_TIMING -DNDEBUG -I. -Isrc -Irubberband -g -O2 -fPIC -Wall -I/usr/local/include -I/usr/local/include -I/usr/local/include -I/usr/local/include    -c -o src/StretcherImpl.o src/StretcherImpl.cpp
ar rsc lib/librubberband.a src/rubberband-c.o src/RubberBandStretcher.o src/StretcherProcess.o src/StretchCalculator.o src/base/Profiler.o src/dsp/AudioCurveCalculator.o src/audiocurves/CompoundAudioCurve.o src/audiocurves/SpectralDifferenceAudioCurve.o src/audiocurves/HighFrequencyAudioCurve.o src/audiocurves/SilentAudioCurve.o src/audiocurves/ConstantAudioCurve.o src/audiocurves/PercussiveAudioCurve.o src/dsp/Resampler.o src/dsp/FFT.o src/system/Allocators.o src/system/sysutils.o src/system/Thread.o src/StretcherChannelData.o src/StretcherImpl.o
g++ -shared -Wl,-Bsymbolic -Wl,-soname=librubberband.so.2 src/rubberband-c.o src/RubberBandStretcher.o src/StretcherProcess.o src/StretchCalculator.o src/base/Profiler.o src/dsp/AudioCurveCalculator.o src/audiocurves/CompoundAudioCurve.o src/audiocurves/SpectralDifferenceAudioCurve.o src/audiocurves/HighFrequencyAudioCurve.o src/audiocurves/SilentAudioCurve.o src/audiocurves/ConstantAudioCurve.o src/audiocurves/PercussiveAudioCurve.o src/dsp/Resampler.o src/dsp/FFT.o src/system/Allocators.o src/system/sysutils.o src/system/Thread.o src/StretcherChannelData.o src/StretcherImpl.o -o lib/librubberband.so -L/usr/local/lib -lsamplerate -L/usr/local/lib -lfftw3  -lpthread 
/usr/bin/ld: /usr/local/lib/libfftw3.a(assert.o): relocation R_X86_64_PC32 against symbol `stdout@@GLIBC_2.2.5' can not be used when making a shared object; recompiled using -fPIC
/usr/bin/ld : finale linked failed : bad value
collect2: error: ld returned 1 exit status
make: *** [Makefile:146: lib/librubberband.so] Error 1

What could be the issue please?

cannam commented 3 years ago

This is an incompatibility with the way FFTW has been compiled - the static library has been compiled without position-independent code and so cannot be linked with a dynamic object that uses PIC. The solution is to recompile FFTW with PIC, or link dynamically against it.