I think it may have been the unused objects from mpich that was causing the 
error, so I went back and read the ld manual again and noted that -noall_load 
is the default. (If you use it, you get an error message: ld: warning: option 
-noall_load is obsolete and being ignored). Here is the linker command that 
actually works:

system -W ${worksrcpath}_SHARED \
        "ld spooles.a -dylib -macosx_version_min ${os.version} 
${configure.ld_archflags} -x -install_name ${prefix}/lib/libspooles.1.dylib -o 
libspooles.1.dylib”

brethen-air:~ marbre$ otool -hv /opt/local/lib/libspooles.1.dylib
Mach header
      magic cputype cpusubtype  caps    filetype ncmds sizeofcmds      flags
MH_MAGIC_64  X86_64        ALL  0x00       DYLIB    11        528   NOUNDEFS 
DYLDLINK TWOLEVEL NO_REEXPORTED_DYLIBS

The dylib is actually quite small, ~4 KB, compared to the static library, 156 
KB.

Mark Brethen
[email protected]



> On Nov 19, 2018, at 1:23 AM, Mark Brethen <[email protected]> wrote:
> 
> With the ‘-r’ option on ld I ended up with an object, not dylib:
> 
> brethen-air:~ marbre$ otool -hv /opt/local/lib/libspooles.1.dylib
> Mach header
>      magic cputype cpusubtype  caps    filetype ncmds sizeofcmds      flags
> MH_MAGIC_64  X86_64        ALL  0x00      OBJECT     4        688 
> SUBSECTIONS_VIA_SYMBOLS
> 
> Removing that, however, causes it to fail: symbol(s) not found for 
> architecture x86_64
> 
> This builds the archive file:
> 
> :debug:build system -W 
> /opt/local/var/macports/build/_Users_marbre_ports_math_spooles/spooles/work/spooles.2.2_SHARED/MPI/src:
>  /usr/bin/make -f makeGlobalLib
> :info:build /opt/local/bin/mpicc-mpich-mp -c -Os -fPIC 
> -I/opt/local/include/mpich-mp aggListMPI.c -o MPI_aggListMPI.o
> .
> .
> .
> :info:build /opt/local/bin/mpicc-mpich-mp -c -Os -fPIC 
> -I/opt/local/include/mpich-mp utilities.c -o MPI_utilities.o
> :info:build ar rv ../../spooles.a MPI_*.o
> :info:build ar: creating archive ../../spooles.a
> .
> .
> .
> :info:build rm -f MPI_*.o
> :info:build ranlib ../../spooles.a
> 
> Then use linker to convert static library to dylib:
> 
> :debug:build system -W 
> /opt/local/var/macports/build/_Users_marbre_ports_math_spooles/spooles/work/spooles.2.2_SHARED:
>  ld -dylib -arch x86_64 -all_load spooles.a -x -install_name 
> /opt/local/lib/libspooles.1.dylib -o libspooles.1.dylib
> 
> Why doesn’t this work?
> <main.log>
> Mark Brethen
> [email protected]
> 
> 
> 
>> On Nov 18, 2018, at 5:54 PM, Joshua Root <[email protected]> wrote:
>> 
>> The default value of configure.ld_archflags is '-arch
>> ${configure.build_arch}' provided the selected compiler supports -arch.
>> So ‘-arch ${configure.ld_archflags}’ expands to e.g. ‘-arch -arch
>> x86_64’. Don't do that. :)
>> 
>> You can easily find out the value of any variable in a portfile by
>> adding a line like:
>> 
>> puts "somevar = ${somevar}"
>> 
>> (Just run something like 'port info' to trigger it.)
>> 
>> - Josh
>> 
>> On 2018-11-19 09:34 , Mark Brethen wrote:
>>> This port does not have a configure phase and I set 'universal no’ It
>>> errors with ‘-arch ${configure.ld_archflags}’. How is this variable set? 
>>> 
>>> 
>>> Mark Brethen
>>> [email protected] <mailto:[email protected]>
>>> 
>>> 
>>> 
>>>> On Nov 18, 2018, at 4:16 PM, Joshua Root <[email protected]
>>>> <mailto:[email protected]>> wrote:
>>>> 
>>>> configure.ld_archflags
>>> 
> 

Reply via email to