proxTV icon indicating copy to clipboard operation
proxTV copied to clipboard

GNU Octave interface

Open 1a7r0ch3 opened this issue 5 years ago • 4 comments

Here is a install_octave.m script, a slight modification of the src/general.h header and of the documentation in README.md enabling interface with GNU Octave. So that Matlab aficionados can go free and open-source!

1a7r0ch3 avatar Jun 17 '19 16:06 1a7r0ch3

Thanks a lot for this nice contribution. I myself am finding it increasingly harder to gain access to a Matlab license to test new versions of proxTV, so an Octave interface is welcomed.

However I have been unable to reproduce the installation with success. When running install_octave.m I would get a "multiple definitions of mexFunction" for each one of the Matlab .cpp files being compiled. Which is silly, because the error claims about a function with equal name being defined in the same line.

Here is the full error log (though for some weird reason some of the prints are in spanish?)

>> install_octave
solveTV1_condat.o: En la función `mexFunction':
/home/alvaro/tmp/proxTVoctave/matlab/solveTV1_condat.cpp:35: definiciones múltiples de `mexFunction'
solveTV1_condat.o:/home/alvaro/tmp/proxTVoctave/matlab/solveTV1_condat.cpp:35: primero se definió aquí
collect2: error: ld returned 1 exit status
Installing proxTV...
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -O3 -fopenmp   -I.  ../src/TVgenopt.cpp -o TVgenopt.o
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -O3 -fopenmp   -I.  ../src/TVL1opt.cpp -o TVL1opt.o
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -O3 -fopenmp   -I.  ../src/TVL1Wopt.cpp -o TVL1Wopt.o
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -O3 -fopenmp   -I.  ../src/TVL2opt.cpp -o TVL2opt.o
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -O3 -fopenmp   -I.  ../src/TVLPopt.cpp -o TVLPopt.o
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -O3 -fopenmp   -I.  ../src/TV2Dopt.cpp -o TV2Dopt.o
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -O3 -fopenmp   -I.  ../src/TV2DWopt.cpp -o TV2DWopt.o
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -O3 -fopenmp   -I.  ../src/TVNDopt.cpp -o TVNDopt.o
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -O3 -fopenmp   -I.  ../src/LPopt.cpp -o LPopt.o
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -O3 -fopenmp   -I.  ../src/utils.cpp -o utils.o
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -O3 -fopenmp   -I.  ../src/condat_fast_tv.cpp -o condat_fast_tv.o
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -O3 -fopenmp   -I.  ../src/johnsonRyanTV.cpp -o johnsonRyanTV.o
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -O3 -fopenmp   -I.  ../src/TVL1opt_tautstring.cpp -o TVL1opt_tautstring.o
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -O3 -fopenmp   -I.  ../src/TVL1opt_hybridtautstring.cpp -o TVL1opt_hybridtautstring.o
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -O3 -fopenmp   -I.  ../src/TVL1opt_kolmogorov.cpp -o TVL1opt_kolmogorov.o


warning: mkoctfile exited with failure status
warning: called from
    mkoctfile at line 171 column 5
    mex at line 29 column 18
    install_octave at line 83 column 13
solveTV1_condattautstring.o: En la función `mexFunction':
/home/alvaro/tmp/proxTVoctave/matlab/solveTV1_condattautstring.cpp:35: definiciones múltiples de `mexFunction'
solveTV1_condattautstring.o:/home/alvaro/tmp/proxTVoctave/matlab/solveTV1_condattautstring.cpp:35: primero se definió aquí
collect2: error: ld returned 1 exit status
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -O3 -fopenmp   -I.  solveTV1_condat.cpp -o solveTV1_condat.o
g++ -shared -Wl,-Bsymbolic  -o solveTV1_condat.mex  *.o solveTV1_condat.o   -lblas -llapack -lm -L/usr/lib/x86_64-linux-gnu/octave/4.0.0 -L/usr/lib/x86_64-linux-gnu -loctinterp -loctave -Wl,-Bsymbolic-functions -Wl,-z,relro

warning: mkoctfile exited with failure status
solveTV1_johnson.o: En la función `mexFunction':
/home/alvaro/tmp/proxTVoctave/matlab/solveTV1_johnson.cpp:37: definiciones múltiples de `mexFunction'
solveTV1_johnson.o:/home/alvaro/tmp/proxTVoctave/matlab/solveTV1_johnson.cpp:37: primero se definió aquí
collect2: error: ld returned 1 exit status
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -O3 -fopenmp   -I.  solveTV1_condattautstring.cpp -o solveTV1_condattautstring.o
g++ -shared -Wl,-Bsymbolic  -o solveTV1_condattautstring.mex  *.o solveTV1_condattautstring.o   -lblas -llapack -lm -L/usr/lib/x86_64-linux-gnu/octave/4.0.0 -L/usr/lib/x86_64-linux-gnu -loctinterp -loctave -Wl,-Bsymbolic-functions -Wl,-z,relro

warning: mkoctfile exited with failure status
solveTV1_PN.o: En la función `mexFunction':
/home/alvaro/tmp/proxTVoctave/matlab/solveTV1_PN.cpp:39: definiciones múltiples de `mexFunction'
solveTV1_PN.o:/home/alvaro/tmp/proxTVoctave/matlab/solveTV1_PN.cpp:39: primero se definió aquí
collect2: error: ld returned 1 exit status
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -O3 -fopenmp   -I.  solveTV1_johnson.cpp -o solveTV1_johnson.o
g++ -shared -Wl,-Bsymbolic  -o solveTV1_johnson.mex  *.o solveTV1_johnson.o   -lblas -llapack -lm -L/usr/lib/x86_64-linux-gnu/octave/4.0.0 -L/usr/lib/x86_64-linux-gnu -loctinterp -loctave -Wl,-Bsymbolic-functions -Wl,-z,relro

warning: mkoctfile exited with failure status
solveTV1_linearizedTautString.o: En la función `mexFunction':
/home/alvaro/tmp/proxTVoctave/matlab/solveTV1_linearizedTautString.cpp:40: definiciones múltiples de `mexFunction'
solveTV1_linearizedTautString.o:/home/alvaro/tmp/proxTVoctave/matlab/solveTV1_linearizedTautString.cpp:40: primero se definió aquí
collect2: error: ld returned 1 exit status
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -O3 -fopenmp   -I.  solveTV1_PN.cpp -o solveTV1_PN.o
g++ -shared -Wl,-Bsymbolic  -o solveTV1_PN.mex  *.o solveTV1_PN.o   -lblas -llapack -lm -L/usr/lib/x86_64-linux-gnu/octave/4.0.0 -L/usr/lib/x86_64-linux-gnu -loctinterp -loctave -Wl,-Bsymbolic-functions -Wl,-z,relro

warning: mkoctfile exited with failure status
solveTV1_classicTautString.o: En la función `mexFunction':
/home/alvaro/tmp/proxTVoctave/matlab/solveTV1_classicTautString.cpp:39: definiciones múltiples de `mexFunction'
solveTV1_classicTautString.o:/home/alvaro/tmp/proxTVoctave/matlab/solveTV1_classicTautString.cpp:39: primero se definió aquí
collect2: error: ld returned 1 exit status
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -O3 -fopenmp   -I.  solveTV1_linearizedTautString.cpp -o solveTV1_linearizedTautString.o
g++ -shared -Wl,-Bsymbolic  -o solveTV1_linearizedTautString.mex  *.o solveTV1_linearizedTautString.o   -lblas -llapack -lm -L/usr/lib/x86_64-linux-gnu/octave/4.0.0 -L/usr/lib/x86_64-linux-gnu -loctinterp -loctave -Wl,-Bsymbolic-functions -Wl,-z,relro

warning: mkoctfile exited with failure status
solveTV1_hybridTautString.o: En la función `mexFunction':
/home/alvaro/tmp/proxTVoctave/matlab/solveTV1_hybridTautString.cpp:39: definiciones múltiples de `mexFunction'
solveTV1_hybridTautString.o:/home/alvaro/tmp/proxTVoctave/matlab/solveTV1_hybridTautString.cpp:39: primero se definió aquí
collect2: error: ld returned 1 exit status
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -O3 -fopenmp   -I.  solveTV1_classicTautString.cpp -o solveTV1_classicTautString.o
g++ -shared -Wl,-Bsymbolic  -o solveTV1_classicTautString.mex  *.o solveTV1_classicTautString.o   -lblas -llapack -lm -L/usr/lib/x86_64-linux-gnu/octave/4.0.0 -L/usr/lib/x86_64-linux-gnu -loctinterp -loctave -Wl,-Bsymbolic-functions -Wl,-z,relro

warning: mkoctfile exited with failure status
solveTV1_kolmogorov.o: En la función `mexFunction':
/home/alvaro/tmp/proxTVoctave/matlab/solveTV1_kolmogorov.cpp:40: definiciones múltiples de `mexFunction'
solveTV1_kolmogorov.o:/home/alvaro/tmp/proxTVoctave/matlab/solveTV1_kolmogorov.cpp:40: primero se definió aquí
collect2: error: ld returned 1 exit status
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -O3 -fopenmp   -I.  solveTV1_hybridTautString.cpp -o solveTV1_hybridTautString.o
g++ -shared -Wl,-Bsymbolic  -o solveTV1_hybridTautString.mex  *.o solveTV1_hybridTautString.o   -lblas -llapack -lm -L/usr/lib/x86_64-linux-gnu/octave/4.0.0 -L/usr/lib/x86_64-linux-gnu -loctinterp -loctave -Wl,-Bsymbolic-functions -Wl,-z,relro

warning: mkoctfile exited with failure status
TVL1Weighted.o: En la función `mexFunction':
/home/alvaro/tmp/proxTVoctave/matlab/TVL1Weighted.cpp:38: definiciones múltiples de `mexFunction'
TVL1Weighted.o:/home/alvaro/tmp/proxTVoctave/matlab/TVL1Weighted.cpp:38: primero se definió aquí
collect2: error: ld returned 1 exit status
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -O3 -fopenmp   -I.  solveTV1_kolmogorov.cpp -o solveTV1_kolmogorov.o
g++ -shared -Wl,-Bsymbolic  -o solveTV1_kolmogorov.mex  *.o solveTV1_kolmogorov.o   -lblas -llapack -lm -L/usr/lib/x86_64-linux-gnu/octave/4.0.0 -L/usr/lib/x86_64-linux-gnu -loctinterp -loctave -Wl,-Bsymbolic-functions -Wl,-z,relro

warning: mkoctfile exited with failure status
TVL1Weighted_tautString.o: En la función `mexFunction':
/home/alvaro/tmp/proxTVoctave/matlab/TVL1Weighted_tautString.cpp:38: definiciones múltiples de `mexFunction'
TVL1Weighted_tautString.o:/home/alvaro/tmp/proxTVoctave/matlab/TVL1Weighted_tautString.cpp:38: primero se definió aquí
collect2: error: ld returned 1 exit status
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -O3 -fopenmp   -I.  TVL1Weighted.cpp -o TVL1Weighted.o
g++ -shared -Wl,-Bsymbolic  -o TVL1Weighted.mex  *.o TVL1Weighted.o   -lblas -llapack -lm -L/usr/lib/x86_64-linux-gnu/octave/4.0.0 -L/usr/lib/x86_64-linux-gnu -loctinterp -loctave -Wl,-Bsymbolic-functions -Wl,-z,relro

warning: mkoctfile exited with failure status
solveTV2_morec.o: En la función `mexFunction':
/home/alvaro/tmp/proxTVoctave/matlab/solveTV2_morec.cpp:24: definiciones múltiples de `mexFunction'
solveTV2_morec.o:/home/alvaro/tmp/proxTVoctave/matlab/solveTV2_morec.cpp:24: primero se definió aquí
collect2: error: ld returned 1 exit status
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -O3 -fopenmp   -I.  TVL1Weighted_tautString.cpp -o TVL1Weighted_tautString.o
g++ -shared -Wl,-Bsymbolic  -o TVL1Weighted_tautString.mex  *.o TVL1Weighted_tautString.o   -lblas -llapack -lm -L/usr/lib/x86_64-linux-gnu/octave/4.0.0 -L/usr/lib/x86_64-linux-gnu -loctinterp -loctave -Wl,-Bsymbolic-functions -Wl,-z,relro

warning: mkoctfile exited with failure status
solveTV2_PGc.o: En la función `mexFunction':
/home/alvaro/tmp/proxTVoctave/matlab/solveTV2_PGc.cpp:24: definiciones múltiples de `mexFunction'
solveTV2_PGc.o:/home/alvaro/tmp/proxTVoctave/matlab/solveTV2_PGc.cpp:24: primero se definió aquí
collect2: error: ld returned 1 exit status
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -O3 -fopenmp   -I.  solveTV2_morec.cpp -o solveTV2_morec.o
g++ -shared -Wl,-Bsymbolic  -o solveTV2_morec.mex  *.o solveTV2_morec.o   -lblas -llapack -lm -L/usr/lib/x86_64-linux-gnu/octave/4.0.0 -L/usr/lib/x86_64-linux-gnu -loctinterp -loctave -Wl,-Bsymbolic-functions -Wl,-z,relro

warning: mkoctfile exited with failure status
solveTV2_morec2.o: En la función `mexFunction':
/home/alvaro/tmp/proxTVoctave/matlab/solveTV2_morec2.cpp:39: definiciones múltiples de `mexFunction'
solveTV2_morec2.o:/home/alvaro/tmp/proxTVoctave/matlab/solveTV2_morec2.cpp:39: primero se definió aquí
collect2: error: ld returned 1 exit status
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -O3 -fopenmp   -I.  solveTV2_PGc.cpp -o solveTV2_PGc.o
g++ -shared -Wl,-Bsymbolic  -o solveTV2_PGc.mex  *.o solveTV2_PGc.o   -lblas -llapack -lm -L/usr/lib/x86_64-linux-gnu/octave/4.0.0 -L/usr/lib/x86_64-linux-gnu -loctinterp -loctave -Wl,-Bsymbolic-functions -Wl,-z,relro

warning: mkoctfile exited with failure status
solveTVgen.o: En la función `mexFunction':
/home/alvaro/tmp/proxTVoctave/matlab/solveTVgen.cpp:46: definiciones múltiples de `mexFunction'
solveTVgen.o:/home/alvaro/tmp/proxTVoctave/matlab/solveTVgen.cpp:46: primero se definió aquí
collect2: error: ld returned 1 exit status
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -O3 -fopenmp   -I.  solveTV2_morec2.cpp -o solveTV2_morec2.o
g++ -shared -Wl,-Bsymbolic  -o solveTV2_morec2.mex  *.o solveTV2_morec2.o   -lblas -llapack -lm -L/usr/lib/x86_64-linux-gnu/octave/4.0.0 -L/usr/lib/x86_64-linux-gnu -loctinterp -loctave -Wl,-Bsymbolic-functions -Wl,-z,relro

warning: mkoctfile exited with failure status
solveTV2D_DR.o: En la función `mexFunction':
/home/alvaro/tmp/proxTVoctave/matlab/solveTV2D_DR.cpp:47: definiciones múltiples de `mexFunction'
solveTV2D_DR.o:/home/alvaro/tmp/proxTVoctave/matlab/solveTV2D_DR.cpp:47: primero se definió aquí
collect2: error: ld returned 1 exit status
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -O3 -fopenmp   -I.  solveTVgen.cpp -o solveTVgen.o
g++ -shared -Wl,-Bsymbolic  -o solveTVgen.mex  *.o solveTVgen.o   -lblas -llapack -lm -L/usr/lib/x86_64-linux-gnu/octave/4.0.0 -L/usr/lib/x86_64-linux-gnu -loctinterp -loctave -Wl,-Bsymbolic-functions -Wl,-z,relro

warning: mkoctfile exited with failure status
solveTV2D_PD.o: En la función `mexFunction':
/home/alvaro/tmp/proxTVoctave/matlab/solveTV2D_PD.cpp:46: definiciones múltiples de `mexFunction'
solveTV2D_PD.o:/home/alvaro/tmp/proxTVoctave/matlab/solveTV2D_PD.cpp:46: primero se definió aquí
collect2: error: ld returned 1 exit status
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -O3 -fopenmp   -I.  solveTV2D_DR.cpp -o solveTV2D_DR.o
g++ -shared -Wl,-Bsymbolic  -o solveTV2D_DR.mex  *.o solveTV2D_DR.o   -lblas -llapack -lm -L/usr/lib/x86_64-linux-gnu/octave/4.0.0 -L/usr/lib/x86_64-linux-gnu -loctinterp -loctave -Wl,-Bsymbolic-functions -Wl,-z,relro

warning: mkoctfile exited with failure status
solveTV2D_CondatChambollePock.o: En la función `mexFunction':
/home/alvaro/tmp/proxTVoctave/matlab/solveTV2D_CondatChambollePock.cpp:44: definiciones múltiples de `mexFunction'
solveTV2D_CondatChambollePock.o:/home/alvaro/tmp/proxTVoctave/matlab/solveTV2D_CondatChambollePock.cpp:44: primero se definió aquí
collect2: error: ld returned 1 exit status
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -O3 -fopenmp   -I.  solveTV2D_PD.cpp -o solveTV2D_PD.o
g++ -shared -Wl,-Bsymbolic  -o solveTV2D_PD.mex  *.o solveTV2D_PD.o   -lblas -llapack -lm -L/usr/lib/x86_64-linux-gnu/octave/4.0.0 -L/usr/lib/x86_64-linux-gnu -loctinterp -loctave -Wl,-Bsymbolic-functions -Wl,-z,relro

warning: mkoctfile exited with failure status
solveTV2D_Yang.o: En la función `mexFunction':
/home/alvaro/tmp/proxTVoctave/matlab/solveTV2D_Yang.cpp:43: definiciones múltiples de `mexFunction'
solveTV2D_Yang.o:/home/alvaro/tmp/proxTVoctave/matlab/solveTV2D_Yang.cpp:43: primero se definió aquí
collect2: error: ld returned 1 exit status
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -O3 -fopenmp   -I.  solveTV2D_CondatChambollePock.cpp -o solveTV2D_CondatChambollePock.o
g++ -shared -Wl,-Bsymbolic  -o solveTV2D_CondatChambollePock.mex  *.o solveTV2D_CondatChambollePock.o   -lblas -llapack -lm -L/usr/lib/x86_64-linux-gnu/octave/4.0.0 -L/usr/lib/x86_64-linux-gnu -loctinterp -loctave -Wl,-Bsymbolic-functions -Wl,-z,relro

warning: mkoctfile exited with failure status
solveTV2D_Kolmogorov.o: En la función `mexFunction':
/home/alvaro/tmp/proxTVoctave/matlab/solveTV2D_Kolmogorov.cpp:43: definiciones múltiples de `mexFunction'
solveTV2D_Kolmogorov.o:/home/alvaro/tmp/proxTVoctave/matlab/solveTV2D_Kolmogorov.cpp:43: primero se definió aquí
collect2: error: ld returned 1 exit status
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -O3 -fopenmp   -I.  solveTV2D_Yang.cpp -o solveTV2D_Yang.o
g++ -shared -Wl,-Bsymbolic  -o solveTV2D_Yang.mex  *.o solveTV2D_Yang.o   -lblas -llapack -lm -L/usr/lib/x86_64-linux-gnu/octave/4.0.0 -L/usr/lib/x86_64-linux-gnu -loctinterp -loctave -Wl,-Bsymbolic-functions -Wl,-z,relro

warning: mkoctfile exited with failure status
solveTV2DL1W.o: En la función `mexFunction':
/home/alvaro/tmp/proxTVoctave/matlab/solveTV2DL1W.cpp:40: definiciones múltiples de `mexFunction'
solveTV2DL1W.o:/home/alvaro/tmp/proxTVoctave/matlab/solveTV2DL1W.cpp:40: primero se definió aquí
collect2: error: ld returned 1 exit status
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -O3 -fopenmp   -I.  solveTV2D_Kolmogorov.cpp -o solveTV2D_Kolmogorov.o
g++ -shared -Wl,-Bsymbolic  -o solveTV2D_Kolmogorov.mex  *.o solveTV2D_Kolmogorov.o   -lblas -llapack -lm -L/usr/lib/x86_64-linux-gnu/octave/4.0.0 -L/usr/lib/x86_64-linux-gnu -loctinterp -loctave -Wl,-Bsymbolic-functions -Wl,-z,relro

warning: mkoctfile exited with failure status
solveTV3D_Yang.o: En la función `mexFunction':
/home/alvaro/tmp/proxTVoctave/matlab/solveTV3D_Yang.cpp:43: definiciones múltiples de `mexFunction'
solveTV3D_Yang.o:/home/alvaro/tmp/proxTVoctave/matlab/solveTV3D_Yang.cpp:43: primero se definió aquí
collect2: error: ld returned 1 exit status
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -O3 -fopenmp   -I.  solveTV2DL1W.cpp -o solveTV2DL1W.o
g++ -shared -Wl,-Bsymbolic  -o solveTV2DL1W.mex  *.o solveTV2DL1W.o   -lblas -llapack -lm -L/usr/lib/x86_64-linux-gnu/octave/4.0.0 -L/usr/lib/x86_64-linux-gnu -loctinterp -loctave -Wl,-Bsymbolic-functions -Wl,-z,relro

warning: mkoctfile exited with failure status
solveTVND_PDR.o: En la función `mexFunction':
/home/alvaro/tmp/proxTVoctave/matlab/solveTVND_PDR.cpp:46: definiciones múltiples de `mexFunction'
solveTVND_PDR.o:/home/alvaro/tmp/proxTVoctave/matlab/solveTVND_PDR.cpp:46: primero se definió aquí
collect2: error: ld returned 1 exit status
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -O3 -fopenmp   -I.  solveTV3D_Yang.cpp -o solveTV3D_Yang.o
g++ -shared -Wl,-Bsymbolic  -o solveTV3D_Yang.mex  *.o solveTV3D_Yang.o   -lblas -llapack -lm -L/usr/lib/x86_64-linux-gnu/octave/4.0.0 -L/usr/lib/x86_64-linux-gnu -loctinterp -loctave -Wl,-Bsymbolic-functions -Wl,-z,relro

warning: mkoctfile exited with failure status
solveTVp_GPFW.o: En la función `mexFunction':
/home/alvaro/tmp/proxTVoctave/matlab/solveTVp_GPFW.cpp:40: definiciones múltiples de `mexFunction'
solveTVp_GPFW.o:/home/alvaro/tmp/proxTVoctave/matlab/solveTVp_GPFW.cpp:40: primero se definió aquí
collect2: error: ld returned 1 exit status
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -O3 -fopenmp   -I.  solveTVND_PDR.cpp -o solveTVND_PDR.o
g++ -shared -Wl,-Bsymbolic  -o solveTVND_PDR.mex  *.o solveTVND_PDR.o   -lblas -llapack -lm -L/usr/lib/x86_64-linux-gnu/octave/4.0.0 -L/usr/lib/x86_64-linux-gnu -loctinterp -loctave -Wl,-Bsymbolic-functions -Wl,-z,relro

warning: mkoctfile exited with failure status
solveTV.o: En la función `mexFunction':
/home/alvaro/tmp/proxTVoctave/matlab/solveTV.cpp:40: definiciones múltiples de `mexFunction'
solveTV.o:/home/alvaro/tmp/proxTVoctave/matlab/solveTV.cpp:40: primero se definió aquí
collect2: error: ld returned 1 exit status
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -O3 -fopenmp   -I.  solveTVp_GPFW.cpp -o solveTVp_GPFW.o
g++ -shared -Wl,-Bsymbolic  -o solveTVp_GPFW.mex  *.o solveTVp_GPFW.o   -lblas -llapack -lm -L/usr/lib/x86_64-linux-gnu/octave/4.0.0 -L/usr/lib/x86_64-linux-gnu -loctinterp -loctave -Wl,-Bsymbolic-functions -Wl,-z,relro

warning: mkoctfile exited with failure status
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -O3 -fopenmp   -I.  solveTV.cpp -o solveTV.o
g++ -shared -Wl,-Bsymbolic  -o solveTV.mex  *.o solveTV.o   -lblas -llapack -lm -L/usr/lib/x86_64-linux-gnu/octave/4.0.0 -L/usr/lib/x86_64-linux-gnu -loctinterp -loctave -Wl,-Bsymbolic-functions -Wl,-z,relro

proxTV successfully installed.

Any idea where this problem could come from?

albarji avatar Jul 08 '19 18:07 albarji

Hi,

Consider the following fact :

Since you provide many solvers that you compile individually into objects files (.o), the mex command line issued gives the dependencies as ".o" to avoid listing all of them ; as in eval(['mex -v -lblas -llapack -lm ' solver{:} '.cpp "*.o"']); The trouble is that some versions of Octave (I think 4.x or less) also create an intermediate object file for the final mex binary, and do not delete it automatically. So, once the first solver ("solveTV1_condat" in the current list) has been compiled, the corresponding object file is still there, containing a mexFunction() entry. Then, when the next solver ("solveTV1_condattautstring") is compiled, the former object file get listed as dependency (through the "*.o"), and the two mexFunction() entry conflicts.

I am sure that the problem revolves around the above explanation, because when adding the linker flag "-z muldefs" (basically allowing multiple definitions; see the documentation of ld), the problem disappears. I submitted a commit correspondingly.

However, the above explanation is certainly incomplete, because:

  1. the very first in the list, solveTV1_condat, already gave the "multiple definition" error; and
  2. I actually already took care of the multiple definition problem, with the line `system(['rm -f ' solver{:} '.o']); so that the faulty object files should not exist in the system when the next solver is compiled. Note that if you do force the linkage with -z muldefs but do not remove the object files after each compilation, the actual problem arise : all solvers will use the mexFunction() of solveTV1_condat as their entry!

To sum up, the workaround is to add the -z muldefs compilation flag, and double check that the object files are deleted after each compilation to avoid actual multiple definitions of the mexFuntion. This does not seem to be necessary with Octave 5. Note also that I only tested solveTVgen, so you might wanna check that the other solvers compile correctly.

By the way, if you want to avoid the Spanish output of gcc (which is most certainly the C compiler called by mex), start Octave with the LANG environment variable set to C (or an English locale). On my shell configuration file, I actually have alias octave='LANG=C; /usr/bin/octave-cli' # LANG is for gcc messages.

Cheers

On 08/07/2019 20:36, Álvaro Barbero Jiménez wrote:

Thanks a lot for this nice contribution. I myself am finding it increasingly harder to gain access to a Matlab license to test new versions of proxTV, so an Octave interface is welcomed.

However I have been unable to reproduce the installation with success. When running install_octave.m I would get a "multiple definitions of mexFunction" for each one of the Matlab .cpp files being compiled. Which is silly, because the error claims about a function with equal name being defined in the same line.

Here is the full error log (though for some weird reason some of the prints are in spanish?)

1a7r0ch3 avatar Jul 08 '19 22:07 1a7r0ch3

Thanks for the LANG tip!

However I'm afraid that even after the update the error persists. I have made sure there are no .o files lying around in the project, but still the log I get now is

>> install_octave
solveTV1_condat.o: In function `mexFunction':
/home/alvaro/tmp/proxTVoctave/matlab/solveTV1_condat.cpp:35: multiple definition of `mexFunction'
solveTV1_condat.o:/home/alvaro/tmp/proxTVoctave/matlab/solveTV1_condat.cpp:35: first defined here
collect2: error: ld returned 1 exit status
Installing proxTV...
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -z muldefs -O3 -fopenmp   -I.  ../src/TVgenopt.cpp -o TVgenopt.o
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -z muldefs -O3 -fopenmp   -I.  ../src/TVL1opt.cpp -o TVL1opt.o
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -z muldefs -O3 -fopenmp   -I.  ../src/TVL1Wopt.cpp -o TVL1Wopt.o
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -z muldefs -O3 -fopenmp   -I.  ../src/TVL2opt.cpp -o TVL2opt.o
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -z muldefs -O3 -fopenmp   -I.  ../src/TVLPopt.cpp -o TVLPopt.o
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -z muldefs -O3 -fopenmp   -I.  ../src/TV2Dopt.cpp -o TV2Dopt.o
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -z muldefs -O3 -fopenmp   -I.  ../src/TV2DWopt.cpp -o TV2DWopt.o
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -z muldefs -O3 -fopenmp   -I.  ../src/TVNDopt.cpp -o TVNDopt.o
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -z muldefs -O3 -fopenmp   -I.  ../src/LPopt.cpp -o LPopt.o
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -z muldefs -O3 -fopenmp   -I.  ../src/utils.cpp -o utils.o
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -z muldefs -O3 -fopenmp   -I.  ../src/condat_fast_tv.cpp -o condat_fast_tv.o
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -z muldefs -O3 -fopenmp   -I.  ../src/johnsonRyanTV.cpp -o johnsonRyanTV.o
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -z muldefs -O3 -fopenmp   -I.  ../src/TVL1opt_tautstring.cpp -o TVL1opt_tautstring.o
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -z muldefs -O3 -fopenmp   -I.  ../src/TVL1opt_hybridtautstring.cpp -o TVL1opt_hybridtautstring.o
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -z muldefs -O3 -fopenmp   -I.  ../src/TVL1opt_kolmogorov.cpp -o TVL1opt_kolmogorov.o


warning: mkoctfile exited with failure status
warning: called from
    mkoctfile at line 171 column 5
    mex at line 29 column 18
    install_octave at line 87 column 13
solveTV1_condattautstring.o: In function `mexFunction':
/home/alvaro/tmp/proxTVoctave/matlab/solveTV1_condattautstring.cpp:35: multiple definition of `mexFunction'
solveTV1_condattautstring.o:/home/alvaro/tmp/proxTVoctave/matlab/solveTV1_condattautstring.cpp:35: first defined here
collect2: error: ld returned 1 exit status
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -z muldefs -O3 -fopenmp   -I.  solveTV1_condat.cpp -o solveTV1_condat.o
g++ -shared -Wl,-Bsymbolic  -o solveTV1_condat.mex  *.o solveTV1_condat.o   -lblas -llapack -lm -L/usr/lib/x86_64-linux-gnu/octave/4.0.0 -L/usr/lib/x86_64-linux-gnu -loctinterp -loctave -Wl,-Bsymbolic-functions -Wl,-z,relro

warning: mkoctfile exited with failure status
solveTV1_johnson.o: In function `mexFunction':
/home/alvaro/tmp/proxTVoctave/matlab/solveTV1_johnson.cpp:37: multiple definition of `mexFunction'
solveTV1_johnson.o:/home/alvaro/tmp/proxTVoctave/matlab/solveTV1_johnson.cpp:37: first defined here
collect2: error: ld returned 1 exit status
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -z muldefs -O3 -fopenmp   -I.  solveTV1_condattautstring.cpp -o solveTV1_condattautstring.o
g++ -shared -Wl,-Bsymbolic  -o solveTV1_condattautstring.mex  *.o solveTV1_condattautstring.o   -lblas -llapack -lm -L/usr/lib/x86_64-linux-gnu/octave/4.0.0 -L/usr/lib/x86_64-linux-gnu -loctinterp -loctave -Wl,-Bsymbolic-functions -Wl,-z,relro

warning: mkoctfile exited with failure status
solveTV1_PN.o: In function `mexFunction':
/home/alvaro/tmp/proxTVoctave/matlab/solveTV1_PN.cpp:39: multiple definition of `mexFunction'
solveTV1_PN.o:/home/alvaro/tmp/proxTVoctave/matlab/solveTV1_PN.cpp:39: first defined here
collect2: error: ld returned 1 exit status
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -z muldefs -O3 -fopenmp   -I.  solveTV1_johnson.cpp -o solveTV1_johnson.o
g++ -shared -Wl,-Bsymbolic  -o solveTV1_johnson.mex  *.o solveTV1_johnson.o   -lblas -llapack -lm -L/usr/lib/x86_64-linux-gnu/octave/4.0.0 -L/usr/lib/x86_64-linux-gnu -loctinterp -loctave -Wl,-Bsymbolic-functions -Wl,-z,relro

warning: mkoctfile exited with failure status
solveTV1_linearizedTautString.o: In function `mexFunction':
/home/alvaro/tmp/proxTVoctave/matlab/solveTV1_linearizedTautString.cpp:40: multiple definition of `mexFunction'
solveTV1_linearizedTautString.o:/home/alvaro/tmp/proxTVoctave/matlab/solveTV1_linearizedTautString.cpp:40: first defined here
collect2: error: ld returned 1 exit status
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -z muldefs -O3 -fopenmp   -I.  solveTV1_PN.cpp -o solveTV1_PN.o
g++ -shared -Wl,-Bsymbolic  -o solveTV1_PN.mex  *.o solveTV1_PN.o   -lblas -llapack -lm -L/usr/lib/x86_64-linux-gnu/octave/4.0.0 -L/usr/lib/x86_64-linux-gnu -loctinterp -loctave -Wl,-Bsymbolic-functions -Wl,-z,relro

warning: mkoctfile exited with failure status
solveTV1_classicTautString.o: In function `mexFunction':
/home/alvaro/tmp/proxTVoctave/matlab/solveTV1_classicTautString.cpp:39: multiple definition of `mexFunction'
solveTV1_classicTautString.o:/home/alvaro/tmp/proxTVoctave/matlab/solveTV1_classicTautString.cpp:39: first defined here
collect2: error: ld returned 1 exit status
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -z muldefs -O3 -fopenmp   -I.  solveTV1_linearizedTautString.cpp -o solveTV1_linearizedTautString.o
g++ -shared -Wl,-Bsymbolic  -o solveTV1_linearizedTautString.mex  *.o solveTV1_linearizedTautString.o   -lblas -llapack -lm -L/usr/lib/x86_64-linux-gnu/octave/4.0.0 -L/usr/lib/x86_64-linux-gnu -loctinterp -loctave -Wl,-Bsymbolic-functions -Wl,-z,relro

warning: mkoctfile exited with failure status
solveTV1_hybridTautString.o: In function `mexFunction':
/home/alvaro/tmp/proxTVoctave/matlab/solveTV1_hybridTautString.cpp:39: multiple definition of `mexFunction'
solveTV1_hybridTautString.o:/home/alvaro/tmp/proxTVoctave/matlab/solveTV1_hybridTautString.cpp:39: first defined here
collect2: error: ld returned 1 exit status
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -z muldefs -O3 -fopenmp   -I.  solveTV1_classicTautString.cpp -o solveTV1_classicTautString.o
g++ -shared -Wl,-Bsymbolic  -o solveTV1_classicTautString.mex  *.o solveTV1_classicTautString.o   -lblas -llapack -lm -L/usr/lib/x86_64-linux-gnu/octave/4.0.0 -L/usr/lib/x86_64-linux-gnu -loctinterp -loctave -Wl,-Bsymbolic-functions -Wl,-z,relro

warning: mkoctfile exited with failure status
solveTV1_kolmogorov.o: In function `mexFunction':
/home/alvaro/tmp/proxTVoctave/matlab/solveTV1_kolmogorov.cpp:40: multiple definition of `mexFunction'
solveTV1_kolmogorov.o:/home/alvaro/tmp/proxTVoctave/matlab/solveTV1_kolmogorov.cpp:40: first defined here
collect2: error: ld returned 1 exit status
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -z muldefs -O3 -fopenmp   -I.  solveTV1_hybridTautString.cpp -o solveTV1_hybridTautString.o
g++ -shared -Wl,-Bsymbolic  -o solveTV1_hybridTautString.mex  *.o solveTV1_hybridTautString.o   -lblas -llapack -lm -L/usr/lib/x86_64-linux-gnu/octave/4.0.0 -L/usr/lib/x86_64-linux-gnu -loctinterp -loctave -Wl,-Bsymbolic-functions -Wl,-z,relro

warning: mkoctfile exited with failure status
TVL1Weighted.o: In function `mexFunction':
/home/alvaro/tmp/proxTVoctave/matlab/TVL1Weighted.cpp:38: multiple definition of `mexFunction'
TVL1Weighted.o:/home/alvaro/tmp/proxTVoctave/matlab/TVL1Weighted.cpp:38: first defined here
collect2: error: ld returned 1 exit status
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -z muldefs -O3 -fopenmp   -I.  solveTV1_kolmogorov.cpp -o solveTV1_kolmogorov.o
g++ -shared -Wl,-Bsymbolic  -o solveTV1_kolmogorov.mex  *.o solveTV1_kolmogorov.o   -lblas -llapack -lm -L/usr/lib/x86_64-linux-gnu/octave/4.0.0 -L/usr/lib/x86_64-linux-gnu -loctinterp -loctave -Wl,-Bsymbolic-functions -Wl,-z,relro

warning: mkoctfile exited with failure status
TVL1Weighted_tautString.o: In function `mexFunction':
/home/alvaro/tmp/proxTVoctave/matlab/TVL1Weighted_tautString.cpp:38: multiple definition of `mexFunction'
TVL1Weighted_tautString.o:/home/alvaro/tmp/proxTVoctave/matlab/TVL1Weighted_tautString.cpp:38: first defined here
collect2: error: ld returned 1 exit status
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -z muldefs -O3 -fopenmp   -I.  TVL1Weighted.cpp -o TVL1Weighted.o
g++ -shared -Wl,-Bsymbolic  -o TVL1Weighted.mex  *.o TVL1Weighted.o   -lblas -llapack -lm -L/usr/lib/x86_64-linux-gnu/octave/4.0.0 -L/usr/lib/x86_64-linux-gnu -loctinterp -loctave -Wl,-Bsymbolic-functions -Wl,-z,relro

warning: mkoctfile exited with failure status
solveTV2_morec.o: In function `mexFunction':
/home/alvaro/tmp/proxTVoctave/matlab/solveTV2_morec.cpp:24: multiple definition of `mexFunction'
solveTV2_morec.o:/home/alvaro/tmp/proxTVoctave/matlab/solveTV2_morec.cpp:24: first defined here
collect2: error: ld returned 1 exit status
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -z muldefs -O3 -fopenmp   -I.  TVL1Weighted_tautString.cpp -o TVL1Weighted_tautString.o
g++ -shared -Wl,-Bsymbolic  -o TVL1Weighted_tautString.mex  *.o TVL1Weighted_tautString.o   -lblas -llapack -lm -L/usr/lib/x86_64-linux-gnu/octave/4.0.0 -L/usr/lib/x86_64-linux-gnu -loctinterp -loctave -Wl,-Bsymbolic-functions -Wl,-z,relro

warning: mkoctfile exited with failure status
solveTV2_PGc.o: In function `mexFunction':
/home/alvaro/tmp/proxTVoctave/matlab/solveTV2_PGc.cpp:24: multiple definition of `mexFunction'
solveTV2_PGc.o:/home/alvaro/tmp/proxTVoctave/matlab/solveTV2_PGc.cpp:24: first defined here
collect2: error: ld returned 1 exit status
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -z muldefs -O3 -fopenmp   -I.  solveTV2_morec.cpp -o solveTV2_morec.o
g++ -shared -Wl,-Bsymbolic  -o solveTV2_morec.mex  *.o solveTV2_morec.o   -lblas -llapack -lm -L/usr/lib/x86_64-linux-gnu/octave/4.0.0 -L/usr/lib/x86_64-linux-gnu -loctinterp -loctave -Wl,-Bsymbolic-functions -Wl,-z,relro

warning: mkoctfile exited with failure status
solveTV2_morec2.o: In function `mexFunction':
/home/alvaro/tmp/proxTVoctave/matlab/solveTV2_morec2.cpp:39: multiple definition of `mexFunction'
solveTV2_morec2.o:/home/alvaro/tmp/proxTVoctave/matlab/solveTV2_morec2.cpp:39: first defined here
collect2: error: ld returned 1 exit status
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -z muldefs -O3 -fopenmp   -I.  solveTV2_PGc.cpp -o solveTV2_PGc.o
g++ -shared -Wl,-Bsymbolic  -o solveTV2_PGc.mex  *.o solveTV2_PGc.o   -lblas -llapack -lm -L/usr/lib/x86_64-linux-gnu/octave/4.0.0 -L/usr/lib/x86_64-linux-gnu -loctinterp -loctave -Wl,-Bsymbolic-functions -Wl,-z,relro

warning: mkoctfile exited with failure status
solveTVgen.o: In function `mexFunction':
/home/alvaro/tmp/proxTVoctave/matlab/solveTVgen.cpp:46: multiple definition of `mexFunction'
solveTVgen.o:/home/alvaro/tmp/proxTVoctave/matlab/solveTVgen.cpp:46: first defined here
collect2: error: ld returned 1 exit status
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -z muldefs -O3 -fopenmp   -I.  solveTV2_morec2.cpp -o solveTV2_morec2.o
g++ -shared -Wl,-Bsymbolic  -o solveTV2_morec2.mex  *.o solveTV2_morec2.o   -lblas -llapack -lm -L/usr/lib/x86_64-linux-gnu/octave/4.0.0 -L/usr/lib/x86_64-linux-gnu -loctinterp -loctave -Wl,-Bsymbolic-functions -Wl,-z,relro

warning: mkoctfile exited with failure status
solveTV2D_DR.o: In function `mexFunction':
/home/alvaro/tmp/proxTVoctave/matlab/solveTV2D_DR.cpp:47: multiple definition of `mexFunction'
solveTV2D_DR.o:/home/alvaro/tmp/proxTVoctave/matlab/solveTV2D_DR.cpp:47: first defined here
collect2: error: ld returned 1 exit status
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -z muldefs -O3 -fopenmp   -I.  solveTVgen.cpp -o solveTVgen.o
g++ -shared -Wl,-Bsymbolic  -o solveTVgen.mex  *.o solveTVgen.o   -lblas -llapack -lm -L/usr/lib/x86_64-linux-gnu/octave/4.0.0 -L/usr/lib/x86_64-linux-gnu -loctinterp -loctave -Wl,-Bsymbolic-functions -Wl,-z,relro

warning: mkoctfile exited with failure status
solveTV2D_PD.o: In function `mexFunction':
/home/alvaro/tmp/proxTVoctave/matlab/solveTV2D_PD.cpp:46: multiple definition of `mexFunction'
solveTV2D_PD.o:/home/alvaro/tmp/proxTVoctave/matlab/solveTV2D_PD.cpp:46: first defined here
collect2: error: ld returned 1 exit status
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -z muldefs -O3 -fopenmp   -I.  solveTV2D_DR.cpp -o solveTV2D_DR.o
g++ -shared -Wl,-Bsymbolic  -o solveTV2D_DR.mex  *.o solveTV2D_DR.o   -lblas -llapack -lm -L/usr/lib/x86_64-linux-gnu/octave/4.0.0 -L/usr/lib/x86_64-linux-gnu -loctinterp -loctave -Wl,-Bsymbolic-functions -Wl,-z,relro

warning: mkoctfile exited with failure status
solveTV2D_CondatChambollePock.o: In function `mexFunction':
/home/alvaro/tmp/proxTVoctave/matlab/solveTV2D_CondatChambollePock.cpp:44: multiple definition of `mexFunction'
solveTV2D_CondatChambollePock.o:/home/alvaro/tmp/proxTVoctave/matlab/solveTV2D_CondatChambollePock.cpp:44: first defined here
collect2: error: ld returned 1 exit status
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -z muldefs -O3 -fopenmp   -I.  solveTV2D_PD.cpp -o solveTV2D_PD.o
g++ -shared -Wl,-Bsymbolic  -o solveTV2D_PD.mex  *.o solveTV2D_PD.o   -lblas -llapack -lm -L/usr/lib/x86_64-linux-gnu/octave/4.0.0 -L/usr/lib/x86_64-linux-gnu -loctinterp -loctave -Wl,-Bsymbolic-functions -Wl,-z,relro

warning: mkoctfile exited with failure status
solveTV2D_Yang.o: In function `mexFunction':
/home/alvaro/tmp/proxTVoctave/matlab/solveTV2D_Yang.cpp:43: multiple definition of `mexFunction'
solveTV2D_Yang.o:/home/alvaro/tmp/proxTVoctave/matlab/solveTV2D_Yang.cpp:43: first defined here
collect2: error: ld returned 1 exit status
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -z muldefs -O3 -fopenmp   -I.  solveTV2D_CondatChambollePock.cpp -o solveTV2D_CondatChambollePock.o
g++ -shared -Wl,-Bsymbolic  -o solveTV2D_CondatChambollePock.mex  *.o solveTV2D_CondatChambollePock.o   -lblas -llapack -lm -L/usr/lib/x86_64-linux-gnu/octave/4.0.0 -L/usr/lib/x86_64-linux-gnu -loctinterp -loctave -Wl,-Bsymbolic-functions -Wl,-z,relro

warning: mkoctfile exited with failure status
solveTV2D_Kolmogorov.o: In function `mexFunction':
/home/alvaro/tmp/proxTVoctave/matlab/solveTV2D_Kolmogorov.cpp:43: multiple definition of `mexFunction'
solveTV2D_Kolmogorov.o:/home/alvaro/tmp/proxTVoctave/matlab/solveTV2D_Kolmogorov.cpp:43: first defined here
collect2: error: ld returned 1 exit status
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -z muldefs -O3 -fopenmp   -I.  solveTV2D_Yang.cpp -o solveTV2D_Yang.o
g++ -shared -Wl,-Bsymbolic  -o solveTV2D_Yang.mex  *.o solveTV2D_Yang.o   -lblas -llapack -lm -L/usr/lib/x86_64-linux-gnu/octave/4.0.0 -L/usr/lib/x86_64-linux-gnu -loctinterp -loctave -Wl,-Bsymbolic-functions -Wl,-z,relro

warning: mkoctfile exited with failure status
solveTV2DL1W.o: In function `mexFunction':
/home/alvaro/tmp/proxTVoctave/matlab/solveTV2DL1W.cpp:40: multiple definition of `mexFunction'
solveTV2DL1W.o:/home/alvaro/tmp/proxTVoctave/matlab/solveTV2DL1W.cpp:40: first defined here
collect2: error: ld returned 1 exit status
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -z muldefs -O3 -fopenmp   -I.  solveTV2D_Kolmogorov.cpp -o solveTV2D_Kolmogorov.o
g++ -shared -Wl,-Bsymbolic  -o solveTV2D_Kolmogorov.mex  *.o solveTV2D_Kolmogorov.o   -lblas -llapack -lm -L/usr/lib/x86_64-linux-gnu/octave/4.0.0 -L/usr/lib/x86_64-linux-gnu -loctinterp -loctave -Wl,-Bsymbolic-functions -Wl,-z,relro

warning: mkoctfile exited with failure status
solveTV3D_Yang.o: In function `mexFunction':
/home/alvaro/tmp/proxTVoctave/matlab/solveTV3D_Yang.cpp:43: multiple definition of `mexFunction'
solveTV3D_Yang.o:/home/alvaro/tmp/proxTVoctave/matlab/solveTV3D_Yang.cpp:43: first defined here
collect2: error: ld returned 1 exit status
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -z muldefs -O3 -fopenmp   -I.  solveTV2DL1W.cpp -o solveTV2DL1W.o
g++ -shared -Wl,-Bsymbolic  -o solveTV2DL1W.mex  *.o solveTV2DL1W.o   -lblas -llapack -lm -L/usr/lib/x86_64-linux-gnu/octave/4.0.0 -L/usr/lib/x86_64-linux-gnu -loctinterp -loctave -Wl,-Bsymbolic-functions -Wl,-z,relro

warning: mkoctfile exited with failure status
solveTVND_PDR.o: In function `mexFunction':
/home/alvaro/tmp/proxTVoctave/matlab/solveTVND_PDR.cpp:46: multiple definition of `mexFunction'
solveTVND_PDR.o:/home/alvaro/tmp/proxTVoctave/matlab/solveTVND_PDR.cpp:46: first defined here
collect2: error: ld returned 1 exit status
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -z muldefs -O3 -fopenmp   -I.  solveTV3D_Yang.cpp -o solveTV3D_Yang.o
g++ -shared -Wl,-Bsymbolic  -o solveTV3D_Yang.mex  *.o solveTV3D_Yang.o   -lblas -llapack -lm -L/usr/lib/x86_64-linux-gnu/octave/4.0.0 -L/usr/lib/x86_64-linux-gnu -loctinterp -loctave -Wl,-Bsymbolic-functions -Wl,-z,relro

warning: mkoctfile exited with failure status
solveTVp_GPFW.o: In function `mexFunction':
/home/alvaro/tmp/proxTVoctave/matlab/solveTVp_GPFW.cpp:40: multiple definition of `mexFunction'
solveTVp_GPFW.o:/home/alvaro/tmp/proxTVoctave/matlab/solveTVp_GPFW.cpp:40: first defined here
collect2: error: ld returned 1 exit status
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -z muldefs -O3 -fopenmp   -I.  solveTVND_PDR.cpp -o solveTVND_PDR.o
g++ -shared -Wl,-Bsymbolic  -o solveTVND_PDR.mex  *.o solveTVND_PDR.o   -lblas -llapack -lm -L/usr/lib/x86_64-linux-gnu/octave/4.0.0 -L/usr/lib/x86_64-linux-gnu -loctinterp -loctave -Wl,-Bsymbolic-functions -Wl,-z,relro

warning: mkoctfile exited with failure status
solveTV.o: In function `mexFunction':
/home/alvaro/tmp/proxTVoctave/matlab/solveTV.cpp:40: multiple definition of `mexFunction'
solveTV.o:/home/alvaro/tmp/proxTVoctave/matlab/solveTV.cpp:40: first defined here
collect2: error: ld returned 1 exit status
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -z muldefs -O3 -fopenmp   -I.  solveTVp_GPFW.cpp -o solveTVp_GPFW.o
g++ -shared -Wl,-Bsymbolic  -o solveTVp_GPFW.mex  *.o solveTVp_GPFW.o   -lblas -llapack -lm -L/usr/lib/x86_64-linux-gnu/octave/4.0.0 -L/usr/lib/x86_64-linux-gnu -loctinterp -loctave -Wl,-Bsymbolic-functions -Wl,-z,relro

warning: mkoctfile exited with failure status
g++ -c -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/octave-4.0.0/octave/.. -I/usr/include/octave-4.0.0/octave -I/usr/include/hdf5/serial -I/usr/include/mpi -pthread -fopenmp -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DOCTAVE -z muldefs -O3 -fopenmp   -I.  solveTV.cpp -o solveTV.o
g++ -shared -Wl,-Bsymbolic  -o solveTV.mex  *.o solveTV.o   -lblas -llapack -lm -L/usr/lib/x86_64-linux-gnu/octave/4.0.0 -L/usr/lib/x86_64-linux-gnu -loctinterp -loctave -Wl,-Bsymbolic-functions -Wl,-z,relro

proxTV successfully installed.

albarji avatar Jul 09 '19 18:07 albarji

Hi,

With a closer look, I understand that octave compiles mex files in two steps : first create an object file, and only then create the executable file from this object. Since the second step contains both "*.o" and "solveTV1_condat.o", the latter appear twice, hence the multiple definitions (and this finally explains the points 1) and 2) that I raised in my previous message). Moreover, it can be seen from your log files that, with your version of octave or gcc, the option -z muldefs is passed for the first step, but not for the second step :

 g++ -c [...] -fPIC -DOCTAVE -z muldefs -O3 -fopenmp 

solveTV1_condat.cpp -o solveTV1_condat.o g++ -shared -Wl,-Bsymbolic -o solveTV1_condat.mex *.o solveTV1_condat.o [...]

In this case it is not possible to resort to the "*.o" to specify dependencies, they must be listed explicitely !

My last commit should do it.

On 09/07/2019 20:18, Álvaro Barbero Jiménez wrote:

Thanks for the LANG tip!

However I'm afraid that even after the update the error persists. I have made sure there are no .o files lying around in the project, but still the log I get now is [...]

1a7r0ch3 avatar Jul 09 '19 22:07 1a7r0ch3