leto / math--gsl

Perl interface to the GNU Scientific Library
http://leto.net/code/Math-GSL
34 stars 25 forks source link

GSL 2.7 : undefined symbol: gsl_spmatrix_uchar_norm1 #231

Closed hakonhagland closed 3 years ago

hakonhagland commented 3 years ago

After applying PR #230, I get the following test failures:

$ PATH="/opt/gsl/gsl-2.7/bin:$PATH" perl Build.PL
$ ./Build
$ LD_LIBRARY_PATH=/opt/gsl/gsl-2.7/lib ./Build test
Building wrappers for GSL 1.15
Building wrappers for GSL 1.16
Building wrappers for GSL 2.0
Building wrappers for GSL 2.1
Building wrappers for GSL 2.2
Building wrappers for GSL 2.2.1
Building wrappers for GSL 2.3
Building wrappers for GSL 2.4
Building wrappers for GSL 2.5
Building wrappers for GSL 2.6
Building wrappers for GSL 2.7
Processing 2.7 XS files, GSL 2.7 (via gsl-config) at /opt/gsl/gsl-2.7
Compiler        = cc (Ubuntu 10.3.0-1ubuntu1) 10.3.0
Copyright (C) 2020 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

ccflags         = -fPIC -I/opt/gsl/gsl-2.7/include -fwrapv -fno-strict-aliasing -pipe -fstack-protector-strong -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -Wall -Wno-sometimes-uninitialized -Wno-unused-function -Wno-unused-value -Wno-unused-function -Wno-unused-variable -Wno-gnu -g -fPIC -fno-omit-frame-pointer -I/opt/gsl/gsl-2.7/include
ldflags         = -shared -L/opt/gsl/gsl-2.7/lib -lgsl -lgslcblas -lm -fPIC -fno-omit-frame-pointer
swig_flags      = -I/opt/gsl/gsl-2.7/include  -w451,454
swig_version    = 4.0.2
PERL5LIB        = 
LD_LIBRARY_PATH = /opt/gsl/gsl-2.7/lib
t/00-load.t ........ 1/? 
#   Failed test 'use Math::GSL::SparseMatrix;'
#   at t/00-load.t line 14.
#     Tried to use 'Math::GSL::SparseMatrix'.
#     Error:  Can't load '/home/hakon/test/math--gsl/blib/arch/auto/Math/GSL/SparseMatrix/SparseMatrix.so' for module Math::GSL::SparseMatrix: /home/hakon/test/math--gsl/blib/arch/auto/Math/GSL/SparseMatrix/SparseMatrix.so: undefined symbol: gsl_spmatrix_uchar_norm1 at /home/hakon/perlbrew/perls/perl-5.32.0/lib/5.32.0/x86_64-linux/DynaLoader.pm line 193.
#  at /home/hakon/test/math--gsl/blib/lib/Math/GSL/SparseMatrix.pm line 11.
# Compilation failed in require at t/00-load.t line 14.
# BEGIN failed--compilation aborted at t/00-load.t line 14.
# Testing Math::GSL 0.42 with GSL 2.7 on x86_64-linux, Perl (/home/hakon/perlbrew/perls/perl-5.32.0/bin/perl) 5.032000
# Looks like you failed 1 test of 56.
t/00-load.t ........ Dubious, test returned 1 (wstat 256, 0x100)
Failed 1/56 subtests 
t/BLAS.t ........... ok       
t/BSpline.t ........ ok   
t/CBLAS.t .......... ok   
t/CDF.t ............ ok       
t/Chebyshev.t ...... ok     
t/Combination.t .... ok     
t/Complex.t ........ ok    
t/Const.t .......... ok   
t/DHT.t ............ ok   
t/Deriv.t .......... ok     
t/Diff.t ........... ok   
t/Eigen.t .......... ok     
t/Errno.t .......... ok    
t/FFT.t ............ ok    
t/Fit.t ............ ok     
t/GSL.t ............ 1/? # 
#   Elements start differing at index 2, delta = 9.99999998363421e-08
#       $x->[2] = 3.0010001
#       $y->[2] = 3.0010002
# 
#   Elements start differing at index 2, delta = 0.00099999999999989
#       $x->[2] = 3
#       $y->[2] = 3.001
t/GSL.t ............ ok    
t/Heapsort.t ....... ok   
t/Histogram.t ...... ok     
t/Histogram2D.t .... ok     
t/IEEEUtils.t ...... ok   
t/Integration.t .... ok     
t/Interp.t ......... ok     
t/Linalg.t ......... ok    
t/Machine.t ........ ok   
t/Matrix.t ......... 1/? # 
#   Elements start differing at index 1, delta = 1
#       $x->[1] = 3
#       $y->[1] = 2
t/Matrix.t ......... ok     
t/MatrixComplex.t .. 1/38 # 
#   Elements start differing at index 1, delta = 1
#       $x->[1] = 3
#       $y->[1] = 4
# 
#   Elements start differing at index 1, delta = 1
#       $x->[1] = 3
#       $y->[1] = 2
t/MatrixComplex.t .. ok     
t/Min.t ............ ok    
t/Monte.t .......... ok     
t/Multifit.t ....... ok     
t/Multilarge.t ..... ok   
t/Multimin.t ....... ok   
t/Multiroots.t ..... ok     
t/Multiset.t ....... ok     
t/NTuple.t ......... 1/11 This is the end at t/NTuple.t line 14.
t/NTuple.t ......... ok     
t/ODEIV.t .......... ok   
t/ODEIV_evolve.t ... ok    
t/Permutation.t .... ok     
t/Poly.t ........... ok   
t/PowInt.t ......... ok     
t/QRNG.t ........... ok     
t/RNG.t ............ ok     
t/Randist.t ........ ok       
t/Roots.t .......... ok     
t/Rstat.t .......... 1/? 
#   Failed test 'The median is 16.5'
#   at t/Rstat.t line 85.
#   (in Math::GSL::Rstat::Test->GSL_RSTAT)

#   Failed test 'gsl_rstat_quantile_get=17.2'
#   at t/Rstat.t line 45.
#   (in Math::GSL::Rstat::Test->GSL_RSTAT_QUANTILE)
# Looks like you failed 2 tests of 27.
t/Rstat.t .......... Dubious, test returned 2 (wstat 512, 0x200)
Failed 2/27 subtests 
t/SF.t ............. 1/? # GSL version=2.7
t/SF.t ............. ok      
t/Siman.t .......... ok   
t/Sort.t ........... ok     
t/SparseMatrix.t ... Can't load '/home/hakon/test/math--gsl/blib/arch/auto/Math/GSL/SparseMatrix/SparseMatrix.so' for module Math::GSL::SparseMatrix: /home/hakon/test/math--gsl/blib/arch/auto/Math/GSL/SparseMatrix/SparseMatrix.so: undefined symbol: gsl_spmatrix_uchar_norm1 at /home/hakon/perlbrew/perls/perl-5.32.0/lib/5.32.0/x86_64-linux/DynaLoader.pm line 193.
 at /home/hakon/test/math--gsl/blib/lib/Math/GSL/SparseMatrix.pm line 11.
Compilation failed in require at (eval 22) line 1.
BEGIN failed--compilation aborted at (eval 22) line 1.
BEGIN failed--compilation aborted at t/SparseMatrix.t line 24.
t/SparseMatrix.t ... Dubious, test returned 2 (wstat 512, 0x200)
No subtests run 
t/Spline.t ......... ok     
t/Statistics.t ..... ok     
t/Sum.t ............ ok     
t/Sys.t ............ ok     
t/Vector.t ......... 1/143 # 
#   Elements start differing at index 0, delta = 9
#       $x->[0] = 1
#       $y->[0] = 10
# 
#   Elements start differing at index 0, delta = 9
#       $x->[0] = 1
#       $y->[0] = 10
t/Vector.t ......... ok       
t/VectorComplex.t .. ok     
t/Wavelet.t ........ ok     
t/Wavelet2D.t ...... ok   
t/ver2func.t ....... # Testing Math::GSL with GSL 1.16.1 on x86_64-linux, Perl (/home/hakon/perlbrew/perls/perl-5.32.0/bin/perl) 5.032000
t/ver2func.t ....... ok   

Test Summary Report
-------------------
t/00-load.t      (Wstat: 256 Tests: 56 Failed: 1)
  Failed test:  54
  Non-zero exit status: 1
t/Rstat.t        (Wstat: 512 Tests: 27 Failed: 2)
  Failed tests:  14, 27
  Non-zero exit status: 2
t/SparseMatrix.t (Wstat: 512 Tests: 0 Failed: 0)
  Non-zero exit status: 2
  Parse errors: No plan found in TAP output
Files=58, Tests=4165,  5 wallclock secs ( 0.31 usr  0.08 sys +  4.47 cusr  0.57 csys =  5.43 CPU)
Result: FAIL
Failed 3/58 test programs. 3/4165 subtests failed.
hakonhagland commented 3 years ago

undefined symbol: gsl_spmatrix_uchar_norm1

Seems like this could be a problem with the GSL library itself, the following C program norm.c :

#include <stdio.h>
#include <gsl/gsl_spmatrix.h>
int
main()
{
    gsl_spmatrix_uchar *A = gsl_spmatrix_uchar_alloc(2, 2);

    gsl_spmatrix_uchar_set(A, 0, 0, 1);
    gsl_spmatrix_uchar_set(A, 0, 1, 2);
    gsl_spmatrix_uchar_set(A, 1, 0, 3);
    gsl_spmatrix_uchar_set(A, 1, 1, 4);

    double norm = gsl_spmatrix_uchar_norm1(A);
    printf("norm = %g\n", norm);
    gsl_spmatrix_uchar_free(A);

    return 0;
}

and compiled with:

$ gcc -Wall -I/opt/gsl/gsl-2.7/include -c norm.c
$ gcc -L/opt/gsl/gsl-2.7/lib -o norm norm.o -lgsl -lgslcblas -lm
/bin/ld: norm.o: in function `main':
norm.c:(.text+0x93): undefined reference to `gsl_spmatrix_uchar_norm1'
collect2: error: ld returned 1 exit status

produces the same error.

hakonhagland commented 3 years ago

Added bug report.