FYI, the following solution worked on Mac OS X (Leopard):
ghc -o SilkwormGame --make -framework Accelerate Main.hs
The key addition is "-framework Accelerate". Thus, on Mac OS X, it is
only necessary to install the "gls" library via macports. Atlas/
LAPACK/BLAS etc. come with the operating system framework above.
Also, I had to replace a DYLD_LIBRARY_PATH assignment in my .profile
with DYLD_FALLBACK_LIBRARY_PATH:
export DYLD_LIBRARY_PATH=/opt/local/lib:/usr/local/cuda/lib
becomes:
export DYLD_FALLBACK_LIBRARY_PATH=/opt/local/lib:/usr/local/cuda/lib
The above change permitted me to use Apple's libraries by default, and
my macports libraries as fallbacks. In particular, when I installed
the "atlas" package via macports, it seems to have updated a key
"libjpeg.dylib" file, thus causing other headaches. Using the
"fallback" method above, the problems went away.
Regards,
Duane Johnson
On Apr 6, 2009, at 1:51 PM, Duane Johnson wrote:
Hi Alberto!
Thanks for your informative reply. I looked in to the versions of
liblapack on my system... it turns out there is indeed a
liblapack.dylib that (apparently) comes with Mac OS X. How to tell
ghc to link to that instead is still in question.
I can run simple matrix operations in ghci as you suggest (in fact,
"runTests 20" succeeds wonderfully); however, I created the
following simple module (test.hs) and it fails:
module Main where
import Numeric.LinearAlgebra.Tests
main = do
runTests 20
I tried plain "--make", as well as the "-dynamic" flag, and then I
tried the "-L" shell argument to point to the /usr/lib dir where the
liblapack.dylib library is located:
$ ghc --make test.hs -o test
[1 of 1] Compiling Main ( test.hs, test.o )
Linking test ...
ld: in /opt/local/lib/liblapack.a(
), not a valid archive member
collect2: ld returned 1 exit status
$ ghc --make -dynamic test.hs -o test
Linking test ...
ld: library not found for -lHShmatrix-0.5.0.1-ghc6.10.1
collect2: ld returned 1 exit status
$ ghc --make -L/usr/lib test.hs -o test
Linking test ...
Undefined symbols:
"_zgemm_", referenced from:
_multiplyC in libHShmatrix-0.5.0.1.a(lapack-aux.o)
"_zgesv_", referenced from:
_linearSolveC_l in libHShmatrix-0.5.0.1.a(lapack-aux.o)
"_zpotrf_", referenced from:
_chol_l_H in libHShmatrix-0.5.0.1.a(lapack-aux.o)
"_dpotrf_", referenced from:
_chol_l_S in libHShmatrix-0.5.0.1.a(lapack-aux.o)
"_dgemm_", referenced from:
_multiplyR in libHShmatrix-0.5.0.1.a(lapack-aux.o)
"_dgesv_", referenced from:
_linearSolveR_l in libHShmatrix-0.5.0.1.a(lapack-aux.o)
"_zgetrf_", referenced from:
_lu_l_C in libHShmatrix-0.5.0.1.a(lapack-aux.o)
"_zgetrs_", referenced from:
_luS_l_C in libHShmatrix-0.5.0.1.a(lapack-aux.o)
"_dgetrf_", referenced from:
_lu_l_R in libHShmatrix-0.5.0.1.a(lapack-aux.o)
"_dgetrs_", referenced from:
_luS_l_R in libHShmatrix-0.5.0.1.a(lapack-aux.o)
ld: symbol(s) not found
collect2: ld returned 1 exit status
I attempted to install hmatrix with the "-faccelerate" option, but
when using "ghc --make" for the above test code, I received the same
error messages noted previously. Is there a way to tell if the "-
faccelerate" was acknowledged and that the alternate library was used?
One more clue: I took a look at the directions found on the page at
mit.edu/harold... it turns out I had installed atlas/lapack
unnecessarily. That explains the mysterious "not a valid archive
member" message. Nevertheless, I am still befuddled by the
"Undefined symbols" above. ghc --make is still unable to figure out
where the liblapack.dylib file is in spite of ghci's success.
Any suggestions from here?
Regards,
Duane Johnson
P.S. I'm CC'ing the Haskell Cafe so that our journey so far can be
archived.
On Apr 6, 2009, at 12:22 PM, Alberto Ruiz wrote:
Hi Duane,
I have seen your messages to Haskell Cafe but I am still thinking
about the problem... :)
Can you run simple matrix operations in ghci?
$ ghci
Prelude> import Numeric.LinearAlgebra
Prelude Numeric.LinearAlgebra> let m = (2><2) [1..4 :: Double]
(...Loading packages...)
Prelude Numeric.LinearAlgebra> m <> m
(2><2)
[ 7.0, 10.0
, 15.0, 22.0 ]
If so, some version of blas/lapack can be found in your system, it
is strange that ghc --make doesn't find them.
Perhaps the problem is that dynamic libraries like liblapack.so are
required instead of static ones like liblapack.a. (In ubuntu they
are in the "devel" packages for blas/lapack.)
I am not familiar with Mac OS, but if you can use the "accelerate
framework" in your system you may try the -faccelerate
configuration option for hmatrix:
cabal install hmatrix -faccelerate
See also the following page (steps 3-8). It explains how to install
hmatrix on Mac OS (required for other project).
http://mit.edu/harold/Public/easyVisionNotes.html
Please let me know if any of these methods works for you.
Thanks for your message,
Alberto
Duane Johnson wrote:
Hi Alberto,
I've been very happy with hmatrix as I've used it in ghci, and I
should first thank you for making such an excellent package. I've
had trouble when linking it using "ghc --make" on Mac OS
(Leopard). Below are two messages I sent to the Haskell Cafe
mailing list. Do you have any insight into either question:
1. How to link without atlas/lapack
2. What the "not a valid archive member" message means?
Thank you!
Duane Johnson
Brigham Young University
Provo, UT
Begin forwarded message:
From: Don Stewart <d...@galois.com>
Date: April 5, 2009 11:48:38 PM MDT
To: Duane Johnson <duane.john...@gmail.com>
Subject: Re: [Haskell-cafe] Re: Linking hmatrix without LAPACK
It would be best to contact the author of hmatrix directly.
duane.johnson:
On a related note, I've installed Atlas, and I get the following
error
when linking:
Linking SilkwormGame ...
ld: in /opt/local/lib/liblapack.a(), not a valid archive member
collect2: ld returned 1 exit status
How would I go about diagnosing this? I've never seen an ld
error like
that.
Thanks again!
Duane Johnson
On Apr 5, 2009, at 11:02 PM, Duane Johnson wrote:
I'm curious if there is a quick fix to this. I installed GLS and
hmatrix, and it runs wonderfully together in ghci. When I run
ghc --
make, however, I run into the following link dependency:
Linking SilkwormGame ...
Undefined symbols:
"_dgemm_", referenced from:
_multiplyR in libHShmatrix-0.5.0.1.a(lapack-aux.o)
"_dgesv_", referenced from:
_linearSolveR_l in libHShmatrix-0.5.0.1.a(lapack-aux.o)
... etc
Is there a way to tell ghc to not link these? Or am I making a
poor
assumption that if my code runs in ghci, it does not need LAPACK?
Thanks,
Duane Johnson
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe