Hello,
I'm trying to link a D program to the BLAS and LAPACK libraries (numerical
linear algebra packages usually written in FORTRAN77).
I've written an extern (C) {} block much like I would in C/C++ to provide
"headers" for the functions I want to call, and then tried to build the program
by
dmd test.d /usr/lib/libblas.a /usr/lib/liblapack.a
This nearly works, but LAPACK complains that several _gfortran symbols are
undefined, such as:
(.text+0x83): undefined reference to `_gfortran_compare_string'
(.text+0x341): undefined reference to `_gfortran_copy_string'
(.text+0x69): undefined reference to `_gfortran_st_write'
...and so on. Has anyone else had luck with this kind of linking? Am I
missing a library that gcc magically includes when linking C and F77? Am I
just flat trying to link wrong with the dmd command?
Thanks!
--mg

Michael,
Do you know if you can use the ATLAS package instead? I have it working
currently with D. I found it a lot easer to work with since there is a C header
file that can almost be directly ported to D.
If you are not interested in ATLAS, you should try using gdc to compile your
program. It might help with the problems that you are encountering.
Hope that helps,
JC
Michael Gratton wrote:

Hello,
I'm trying to link a D program to the BLAS and LAPACK libraries (numerical
linear algebra packages usually written in FORTRAN77).
I've written an extern (C) {} block much like I would in C/C++ to provide
"headers" for the functions I want to call, and then tried to build the program
by
dmd test.d /usr/lib/libblas.a /usr/lib/liblapack.a
This nearly works, but LAPACK complains that several _gfortran symbols are
undefined, such as:
(.text+0x83): undefined reference to `_gfortran_compare_string'
(.text+0x341): undefined reference to `_gfortran_copy_string'
(.text+0x69): undefined reference to `_gfortran_st_write'
...and so on. Has anyone else had luck with this kind of linking? Am I
missing a library that gcc magically includes when linking C and F77? Am I
just flat trying to link wrong with the dmd command?
Thanks!
--mg

GDC did the trick quite nicely. Thanks for the help! I didn't get a chance to
try out ATLAS. We have fancy Intel BLAS/LAPACK that we paid money for, so it
seems like a shame not to use them :)
(But the single-thread performance difference is <5% for problems I run...)
Yeah, and a D success story: the D templates allow me to write default
BLAS-type routines for nice vector classes using long double ('real')
precision. When the template is instantiated with double or float, I can just
link to the standard BLAS/LAPACK. This really clears up a huge headache that
was involved in testing things at different precisions.
Jonathan Crapuchettes Wrote:

Michael,
Do you know if you can use the ATLAS package instead? I have it working
currently with D. I found it a lot easer to work with since there is a C
header
file that can almost be directly ported to D.
If you are not interested in ATLAS, you should try using gdc to compile your
program. It might help with the problems that you are encountering.
Hope that helps,
JC
Michael Gratton wrote:

Hello,
I'm trying to link a D program to the BLAS and LAPACK libraries (numerical
linear algebra packages usually written in FORTRAN77).
I've written an extern (C) {} block much like I would in C/C++ to provide
"headers" for the functions I want to call, and then tried to build the program
by
dmd test.d /usr/lib/libblas.a /usr/lib/liblapack.a
This nearly works, but LAPACK complains that several _gfortran symbols are
undefined, such as:
(.text+0x83): undefined reference to `_gfortran_compare_string'
(.text+0x341): undefined reference to `_gfortran_copy_string'
(.text+0x69): undefined reference to `_gfortran_st_write'
...and so on. Has anyone else had luck with this kind of linking? Am I
missing a library that gcc magically includes when linking C and F77? Am I
just flat trying to link wrong with the dmd command?
Thanks!
--mg

Hello,
I'm trying to link a D program to the BLAS and LAPACK libraries (numerical
linear algebra packages usually written in FORTRAN77).
I've written an extern (C) {} block much like I would in C/C++ to provide
"headers" for the functions I want to call, and then tried to build the program
by
dmd test.d /usr/lib/libblas.a /usr/lib/liblapack.a
This nearly works, but LAPACK complains that several _gfortran symbols are
undefined, such as:
(.text+0x83): undefined reference to `_gfortran_compare_string'
(.text+0x341): undefined reference to `_gfortran_copy_string'
(.text+0x69): undefined reference to `_gfortran_st_write'
...and so on. Has anyone else had luck with this kind of linking? Am I
missing a library that gcc magically includes when linking C and F77? Am I
just flat trying to link wrong with the dmd command?
Thanks!
--mg