|
From: | Anirudha Bose |
Subject: | Re: MXE Octave: "... has no symbols" warning under Mac OS X |
Date: | Fri, 20 Sep 2013 18:39:42 +0530 |
The directory to the scripts needs to be added to Octave's path (not your shell's path).On Sep 3, 2013, at 1:40 PM, Anirudha Bose wrote:
> On Tue, Sep 3, 2013 at 9:56 PM, Benjamin Abbott <address@hidden> wrote:
>
>> On Sep 3, 2013, at 11:57 AM, Anirudha Bose <address@hidden> wrote:
>>
>>> On Tue, Sep 3, 2013 at 6:18 PM, Ben Abbott <address@hidden> wrote:
>>> On Sep 3, 2013, at 4:11 AM, Anirudha Bose wrote:
>>>
>>> >
>>> > On Tue, Aug 27, 2013 at 7:58 PM, Alexander Hansen <address@hidden> wrote:
>>> >> On 8/27/13 4:58 AM, Ben Abbott wrote:
>>> >>> On Aug 27, 2013, at 4:26 AM, Anirudha Bose wrote:
>>> >>>
>>> >>>> I have been working on reusing mxe-octave [1] to natively build Octave for Mac OS X. I have been able to complete the build process for the target i686-apple-darwin11, but the executable usr/bin/octave doesn't launch Octave. Here is the error I see.
>>> >>>>
>>> >>>> dyld: Library not loaded: libcholmod.so
>>> >>>> Referenced from: /Users/mac6-user1/./mxe-octave/usr/bin/octave
>>> >>>> Reason: image not found
>>> >>>> Trace/BPT trap: 5
>>> >>>>
>>> >>>> I tried to trace back the error and saw that the library libcholmod.so belongs to the package suitesparse. The following is a part of the log of suitesparse, which I think is responsible for the above error.
>>> >>>>
>>> >>>> ar rv libcholmod.a cholmod_aat.o cholmod_add.o cholmod_band.o cholmod_change_factor.o cholmod_common.o cholmod_complex.o cholmod_copy.o cholmod_dens$
>>> >>>> ar: creating archive libcholmod.a
>>> >>>> /opt/local/bin/ranlib: file: libcholmod.a(cholmod_ccolamd.o) has no symbols
>>> >>>> /opt/local/bin/ranlib: file: libcholmod.a(cholmod_csymamd.o) has no symbols
>>> >>>> /opt/local/bin/ranlib: file: libcholmod.a(cholmod_metis.o) has no symbols
>>> >>>> /opt/local/bin/ranlib: file: libcholmod.a(cholmod_nesdis.o) has no symbols
>>> >>>> /opt/local/bin/ranlib: file: libcholmod.a(cholmod_camd.o) has no symbols
>>> >>>> /opt/local/bin/ranlib: file: libcholmod.a(cholmod_l_ccolamd.o) has no symbols
>>> >>>> /opt/local/bin/ranlib: file: libcholmod.a(cholmod_l_csymamd.o) has no symbols
>>> >>>> /opt/local/bin/ranlib: file: libcholmod.a(cholmod_l_metis.o) has no symbols
>>> >>>> /opt/local/bin/ranlib: file: libcholmod.a(cholmod_l_nesdis.o) has no symbols
>>> >>>> /opt/local/bin/ranlib: file: libcholmod.a(cholmod_l_camd.o) has no symbols
>>> >>>>
>>> >>>> I suppose the problem is because Mac OS "ar" is not standard. I have also noticed these warnings with other packages too. Can anyone tell me how to get a proper build under Mac OS X?
>>> >>>>
>>> >>>> [1] http://hg.octave.org/mxe-octave
>>> >>>>
>>> >>>> - Anirudha
>>> >>>
>>> >>> MacOSX's toolchain avoids the use of static libraries (I assume to avoid violating GNU licenses). That is likely at the root of the problem.
>>> >>>
>>> >>> In any event, I expect that both Fink and Macports include an "ar" with their basic installation.
>>> >>>
>>> >>> Ben
>>> >>
>>> >> You assume incorrectly in the case of Fink. :-) We use the system's "ar".
>>> >>
>>> >> It looks to me like the problem could be that /Users/mac6-user1/./mxe-octave/usr/bin/octave wants to link "libcholmod.so", which would be /Users/mac6-user1/./mxe-octave/usr/bin/libcholmod.so . You can check this scenario using "otool -L /Users/mac6-user1/./mxe-octave/usr/bin/octave" .
>>> >
>>> > This is exactly the reason why I am seeing the above errors. I am using install_name_tool for changing the paths, but is there any way to automate this job? The errors exist in too many executables and shared libraries to be done manually one by one. I also recompiled Octave with a new LDFLAG -headerpad_max_install_names to reserve enough space for changing all dynamic shared library paths.
>>>
>>> Maybe there is a better way ... but I wrote scripts to handle this task
>>>
>>> http://wiki.octave.org/Create_a_MacOS_X_App_Bundle_Using_MacPorts#Fixing_.22dyld:_Library_not_loaded.22_Errors
>>>
>>> I got the following error when I executed your scripts.
>>>
>>> octave:1> dylibs_fix ("bin/octave", "lib", false)
>>> Working in directory -> "lib" ...error: 'dylibs_isdylib' undefined near line 74 column 21
>>> error: evaluating argument list element number 1
>>> error: called from:
>>> error: /Users/mac6-user1/mxe/mxe-octave-anirudha/usr/x86_64-apple-darwin12.2.1/dylibs_find.m at line 74, column 13
>>> error: /Users/mac6-user1/mxe/mxe-octave-anirudha/usr/x86_64-apple-darwin12.2.1/dylibs_fix.m at line 160, column 12
>>>
>>> I have saved all the m-scripts at one place, and my working directory contained the bin and lib folders. Am I doing something wrong?
>>>
>>> - Anirudha
>>
>> Please add the directory containing the scripts to your path.
>
> This doesn't seem to solve my problem. After adding the directory to my path, this is what "echo $PATH" returns --
>
> /opt/local/bin:/opt/local/sbin:/opt/local/bin:/opt/local/sbin:/usr/local/upgraded/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/Users/mac6-user1/mxe/mxe-octave-anirudha/usr/x86_64-apple-darwin12.2.1/
>
> The last path contains all the 4 scripts. I opened Octave and executed dylibs_fix ("bin/octave", "lib", false), but got the same errors.
Ben
[Prev in Thread] | Current Thread | [Next in Thread] |