[Haskell-cafe] Re: Linking hmatrix without LAPACK
Duane Johnson
duane.johnson at gmail.com
Mon Apr 6 18:19:49 EDT 2009
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 <dons at galois.com>
>>>> Date: April 5, 2009 11:48:38 PM MDT
>>>> To: Duane Johnson <duane.johnson at 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 at haskell.org
>>>>> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
More information about the Haskell-Cafe
mailing list