octave-maintainers
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Calling BLAS and LAPACK libraries in Octave 3.3


From: bpabbott
Subject: Re: Calling BLAS and LAPACK libraries in Octave 3.3
Date: Tue, 21 Sep 2010 19:52:49 +0000 (GMT)

On Sep 21, 2010, at 03:12 PM, Lukas Reichlin <address@hidden> wrote:

On 19.09.2010, at 18:30, Ben Abbott wrote:

> On Sep 19, 2010, at 7:13 AM, Lukas Reichlin wrote:
>
>> On 18.09.2010, at 16:56, Ben Abbott wrote:
>>
>>> On Sep 18, 2010, at 9:16 AM, Lukas Reichlin wrote:
>>>
>>>> Dear Octave Community,
>>>>
>>>> I noticed the NEWS entry
>>>>
>>>> ** BLAS and LAPACK libraries are now required to build Octave. The
>>>> subset of the reference BLAS and LAPACK libraries has been removed
>>>> from the Octave sources.
>>>>
>>>> Since I have problems with mkoctfile (it doesn't find routines like
>>>> DLAMCH, see below) when building the control package [1] with MacPorts' octave-
>>>> devel 3.3.52, my question is:
>>>>
>>>> Do I need to change something in my package (e.g. src/Makefile [2]) or
>>>> does it seem like a MacPorts-related problem?
>>>>
>>>> Thanks in advance for any hints!
>>>> Best Regards,
>>>> Lukas
>>>>
>>>> PS:
>>>> * There are no problems building "control" when using MacPorts octave-3.2.4, neither PPC nor Intel.
>>>> * Note that is possible to compile individual oct-files by src/makefile_*.m
>>>> * The only thing that works for me with octave 3.3.52 is src/makefile_helpers.m, probably because those functions are pure C++.
>>>> * inst/test_control.m executes all tests at once.
>>>>
>>>> [1] http://octave.svn.sourceforge.net/viewvc/octave/trunk/octave-forge/main/control/
>>>>
>>>> [2] http://octave.svn.sourceforge.net/viewvc/octave/trunk/octave-forge/main/control/src/Makefile
>>>>
>>>> octave:4> makefile_zero
>>>> Undefined symbols:
>>>> "_dlaset_", referenced from:
>>>> _ab08nd_ in AB08ND.o
>>>> _ab08nd_ in AB08ND.o
>>>> _ab08nx_ in AB08NX.o
>>>> _ab08nx_ in AB08NX.o
>>>> _ab08nx_ in AB08NX.o
>>>> _ab08nx_ in AB08NX.o
>>>> "_dggev_", referenced from:
>>>> Fslab08nd(octave_value_list const&, int) in slab08nd.o
>>>> "_dlapmt_", referenced from:
>>>> _ab08nx_ in AB08NX.o
>>>> "_dlarfg_", referenced from:
>>>> _ab08nx_ in AB08NX.o
>>>> _mb03oy_ in MB03OY.o
>>>> _mb03py_ in MB03PY.o
>>>> "_dlatzm_", referenced from:
>>>> _ab08nx_ in AB08NX.o
>>>> "_dlacpy_", referenced from:
>>>> _ab08nd_ in AB08ND.o
>>>> _ab08nd_ in AB08ND.o
>>>> _ab08nd_ in AB08ND.o
>>>> _ab08nd_ in AB08ND.o
>>>> _ab08nd_ in AB08ND.o
>>>> _ab08nd_ in AB08ND.o
>>>> "_dtzrzf_", referenced from:
>>>> _ab08nd_ in AB08ND.o
>>>> "_dormqr_", referenced from:
>>>> _ab08nx_ in AB08NX.o
>>>> "_dormrq_", referenced from:
>>>> _ab08nx_ in AB08NX.o
>>>> _ab08nx_ in AB08NX.o
>>>> "_dlaic1_", referenced from:
>>>> _mb03oy_ in MB03OY.o
>>>> _mb03oy_ in MB03OY.o
>>>> _mb03py_ in MB03PY.o
>>>> _mb03py_ in MB03PY.o
>>>> "_dlamch_", referenced from:
>>>> _ab08nd_ in AB08ND.o
>>>> _tb01id_ in TB01ID.o
>>>> _tb01id_ in TB01ID.o
>>>> "_dormrz_", referenced from:
>>>> _ab08nd_ in AB08ND.o
>>>> _ab08nd_ in AB08ND.o
>>>> "_dlange_", referenced from:
>>>> _ab08nd_ in AB08ND.o
>>>> "_dlarf_", referenced from:
>>>> _mb03oy_ in MB03OY.o
>>>> _mb03py_ in MB03PY.o
>>>> "_ilaenv_", referenced from:
>>>> _ab08nd_ in AB08ND.o
>>>> _ab08nd_ in AB08ND.o
>>>> _ab08nx_ in AB08NX.o
>>>> _ab08nx_ in AB08NX.o
>>>> _ab08nx_ in AB08NX.o
>>>> ld: symbol(s) not found
>>>> collect2: ld returned 1 exit status
>>>> Undefined symbols:
>>>> "_dlartg_", referenced from:
>>>> _ag08by_ in AG08BY.o
>>>> _ag08by_ in AG08BY.o
>>>> "_dlaset_", referenced from:
>>>> _ag08bd_ in AG08BD.o
>>>> _ag08by_ in AG08BY.o
>>>> _tg01fd_ in TG01FD.o
>>>> _tg01fd_ in TG01FD.o
>>>> _tg01fd_ in TG01FD.o
>>>> _tg01fd_ in TG01FD.o
>>>> _tg01fd_ in TG01FD.o
>>>> _tg01fd_ in TG01FD.o
>>>> _tg01fd_ in TG01FD.o
>>>> _tg01fd_ in TG01FD.o
>>>> "_dggev_", referenced from:
>>>> Fslag08bd(octave_value_list const&, int) in slag08bd.o
>>>> "_dlapmt_", referenced from:
>>>> _ag08by_ in AG08BY.o
>>>> "_dlarfg_", referenced from:
>>>> _ag08by_ in AG08BY.o
>>>> _mb03oy_ in MB03OY.o
>>>> "_dlatzm_", referenced from:
>>>> _ag08by_ in AG08BY.o
>>>> "_dlacpy_", referenced from:
>>>> _ag08bd_ in AG08BD.o
>>>> _ag08bd_ in AG08BD.o
>>>> _ag08bd_ in AG08BD.o
>>>> _ag08bd_ in AG08BD.o
>>>> _ag08bd_ in AG08BD.o
>>>> _ag08bd_ in AG08BD.o
>>>> _ag08bd_ in AG08BD.o
>>>> _ag08bd_ in AG08BD.o
>>>> _ag08bd_ in AG08BD.o
>>>> "_dtzrzf_", referenced from:
>>>> _ag08bd_ in AG08BD.o
>>>> _tg01fd_ in TG01FD.o
>>>> _tg01fd_ in TG01FD.o
>>>> "_dormqr_", referenced from:
>>>> _ag08by_ in AG08BY.o
>>>> _tg01fd_ in TG01FD.o
>>>> _tg01fd_ in TG01FD.o
>>>> _tg01fd_ in TG01FD.o
>>>> _tg01fd_ in TG01FD.o
>>>> _tg01fd_ in TG01FD.o
>>>> _tg01fd_ in TG01FD.o
>>>> "_dlaic1_", referenced from:
>>>> _ag08by_ in AG08BY.o
>>>> _ag08by_ in AG08BY.o
>>>> _mb03oy_ in MB03OY.o
>>>> _mb03oy_ in MB03OY.o
>>>> "_dlamch_", referenced from:
>>>> _ag08bd_ in AG08BD.o
>>>> _ag08by_ in AG08BY.o
>>>> _tg01ad_ in TG01AD.o
>>>> _tg01fd_ in TG01FD.o
>>>> "_dormrz_", referenced from:
>>>> _ag08bd_ in AG08BD.o
>>>> _ag08bd_ in AG08BD.o
>>>> _tg01fd_ in TG01FD.o
>>>> _tg01fd_ in TG01FD.o
>>>> _tg01fd_ in TG01FD.o
>>>> _tg01fd_ in TG01FD.o
>>>> _tg01fd_ in TG01FD.o
>>>> "_dlange_", referenced from:
>>>> _ag08bd_ in AG08BD.o
>>>> _ag08bd_ in AG08BD.o
>>>> _tg01fd_ in TG01FD.o
>>>> _tg01fd_ in TG01FD.o
>>>> "_dlarf_", referenced from:
>>>> _mb03oy_ in MB03OY.o
>>>> "_ilaenv_", referenced from:
>>>> _ag08bd_ in AG08BD.o
>>>> _ag08bd_ in AG08BD.o
>>>> _ag08by_ in AG08BY.o
>>>> _tg01fd_ in TG01FD.o
>>>> _tg01fd_ in TG01FD.o
>>>> _tg01fd_ in TG01FD.o
>>>> _tg01fd_ in TG01FD.o
>>>> _tg01fd_ in TG01FD.o
>>>> _tg01fd_ in TG01FD.o
>>>> _tg01fd_ in TG01FD.o
>>>> ld: symbol(s) not found
>>>> collect2: ld returned 1 exit status
>>>> octave:5>
>>>
>>> I'm a Mac user but have no experience with mkoctfile. So my thoughts might not be worth much.
>>>
>>> After looking at the help text for mkoctfile, I'd try adding "-Wl,-framework -Wl,vecLib" to each mkoctfile command.
>>>
>>> Ben
>>
>> Thank you very much for your reply, Ben. I have tried out some oct-files like
>>
>> mkoctfile -Wl,-framework -Wl,vecLib \
>> slag08bd.cc \
>> AG08BD.f AG08BY.f TG01AD.f TB01XD.f MA02CD.f \
>> TG01FD.f MA02BD.f MB03OY.f
>>
>> (the example above is the second mkoctfile call in src/makefile_zero.m)
>>
>> and it worked fine when I called mkoctfile from bash. However, running mkoctfile inside octave leads to
>>
>> octave:1> cd (fileparts (which ("makefile_zero")))
>> octave:2> mkoctfile -Wl,-framework -Wl,vecLib \
>>> slag08bd.cc \
>>> AG08BD.f AG08BY.f TG01AD.f TB01XD.f MA02CD.f \
>>> TG01FD.f MA02BD.f MB03OY.f
>> usage: basename string [suffix]
>> basename [-a] [-s suffix] string [...]
>> error: `framework' undefined near line 2 column 16
>> octave:2>
>
> Hopefully, this will be my *last* suggestion. I just discovered that Octave will properly interpret ...
>
> mkoctfile "-Wl,-framework" "-Wl,vecLib" \
> slag08bd.cc \
> AG08BD.f AG08BY.f TG01AD.f TB01XD.f MA02CD.f \
> TG01FD.f MA02BD.f MB03OY.f
>
> Ben

Hi Ben

Thanks for your patience. I added the options to src/makefile_*.m (but not to src/Makefile for pkg install) and tested them on some other machines. Unfortunately, "-Wl,-framework" "-Wl,vecLib" breaks non-macintosh platforms, e.g. Fedora 13 with Octave 3.2.4 on an old P4.

Does this problem require some kind of mac-specific patch for mkoctfile? Or is setting a few compiler flags in the MacPorts Portfile (=Makefile) for octave-devel all we need?

Best Regards,
Lukas
 
The framework/vecLib stuff is definitely MacOS only.

When compiling Octave, identifying the Lapack/Blas libs is handled by configure. The bug_report function is able to access the results of the configure script, so it may be possible to parse the result to determine the Lapack/Blas libs. However, I'm skeptical that would be a reliable solution.

Since the Lapack/Blas stuff won't be needed for all oct-files, I recommend you apply modify the compiler options in the Portfile when they are needed (as they are for the "control" package).

Ben



reply via email to

[Prev in Thread] Current Thread [Next in Thread]