On Sun, Dec 13, 2020 at 4:27 PM Håkon Hægland <hakon.hagl...@gmail.com> wrote:
> I am trying to generate Perl wrappers for GSL on Windows 10, MSYS2. These > wrappers are produced by SWIG which produces .dll libraries that are loaded > by Perl at run time. Since configure.ac currently ignores --enable-shared > for MSYS2 and generates only a static libgsl.a library, the the .dll > libraries generated by Perl will each include copies of the global > variables in libgsl.a. For example, the variable gsl_error_handler in > error.c. This makes the usage of the function gsl_set_error_handler_off() > in error.c unpredictable, since its result will depend on which of the Perl > generated .dll modules are called. > > I believe configure.ac needs to be updated here. See line 167: > > case $host in > *-*-cygwin* | *-*-mingw* ) > if test "$enable_shared" = yes; then > GSLCBLAS_LDFLAGS="$GSLCBLAS_LDFLAGS -no-undefined" > GSL_LDFLAGS="$GSL_LDFLAGS -no-undefined" > GSL_LIBADD="cblas/libgslcblas.la" > fi > ;; > esac > > > by adding "msys" at line 168, it is possible to create a > libgsl.dll.a import library that will refer to a .dll shared library. If I > change line 168 to: > > *-*-cygwin* | *-*-mingw* | *-*-msys* ) # <-- add msys here > > and rerun ./autogen.sh and then run > > ./configure --enable-shared --prefix=/opt/gsl/gsl-2.6; make; make install > > it now produces an import libarary in /opt/gsl/gsl-2.6/lib/libgsl.dll.a and > a shared library in /opt/gsl/gsl-2.6/bin/msys-gsl-25.dll > Can confirm, that's the right thing to do. -- Reini Urban