Summary:ASTERISK-20579: Asterisk fails to compile on Solaris without makeopts edits
Reporter:Jeremy Kister (jkister)Labels:
Date Opened:2012-10-18 02:59:25Date Closed:
Versions:11.0.0 13.18.4 Frequency of
Environment: asterisk-11.0.0-rc2 on Solaris 10 sparcAttachments:( 0) config.log
( 1) make_noisy-1.txt
( 2) make_noisy-2.txt
Description:for asterisk-11.0.0-rc2 (not available in Jira yet) on Solaris 10 sparc

during make:

  [LD] libasteriskssl.o -> libasteriskssl.so.1
ld: warning: option -o appears more than once, first setting taken
/usr/ccs/bin/ld: illegal option -- version-script
/usr/ccs/bin/ld: illegal option -- warn-common
usage: ld [-6:abc:d:e:f:h:il:mo:p:rstu:z:B:CD:F:GI:L:M:N:P:Q:R:S:VY:?] file(s)
       [-64]           enforce a 64-bit link-edit
       [-a]            create an absolute file
       [-b]            do not do special PIC relocations in a.out
       [-B direct | nodirect]
                       establish direct bindings, or inhibit direct binding
                       to, the object being created
       [-B dynamic | static]
                       search for shared libraries|archives
       [-B eliminate]  eliminate unqualified global symbols from the
                       symbol table
       [-B group]      relocate object from within group
       [-B local]      reduce unqualified global symbols to local
       [-B reduce]     process symbol reductions
       [-B symbolic]   bind external references to definitions when creating
                       shared objects
       [-c name]       record configuration file `name'
       [-C]            demangle C++ symbol name diagnostics
       [-d y | n]      operate in dynamic|static mode
       [-D token,...]  print diagnostic messages
       [-e epsym]      use `epsym' as entry point address
       [-f name]       specify library for which this file is an auxiliary
       [-F name]       specify library for which this file is a filter
       [-G]            create a shared object
       [-h name]       use `name' as internal shared object identifier
       [-i]            ignore LD_LIBRARY_PATH setting
       [-I name]       use `name' as path of interpreter
       [-l x]          search for libx.so or libx.a
       [-L path]       search for libraries in directory `path'
       [-m]            print memory map
       [-M mapfile]    use processing directives contained in `mapfile'
       [-N string]     create a dynamic dependency for `string'
       [-o outfile]    name the output file `outfile'
       [-p auditlib]   identify audit library to accompany this object
       [-P auditlib]   identify audit library for processing the dependencies
                       of this object
       [-Q y | n]      do|do not place version information in output file
       [-r]            create a relocatable object
       [-R path]       specify a library search path to be used at run time
       [-s]            strip any symbol and debugging information
       [-S supportlib]
                       specify a link-edit support library
       [-t]            do not warn of multiply-defined symbols that have
                       different sizes or alignments
       [-u symname]    create an undefined symbol `symname'
       [-V]            print version information
       [-Y P,dirlist]  use `dirlist' as a default path when searching for
       [-z absexec]    when building an executable absolute symbols
                       referenced in dynamic objects are promoted to
                       the executable
       [-z allextract | defaultextract | weakextract]
                       extract all member files, only members that resolve
                       undefined tor tentative symbols, or allow extraction of
                       archive members to resolvetweak references from
                       archive files
       [-z altexec64]  execute the 64-bit link-editor
       [-z combreloc]  combine multiple relocation sections
       [-z defs]       disallow undefined symbol references
       [-z direct | nodirect]
                       enable|disable direct binding to shared object
       [-z endfiltee]  marks a filtee such that it will terminate a filters
       [-z finiarray=function]
                       name of function to be appended to the .finiarray
       [-z groupperm | nogroupperm]
                       enable|disable setting of group permissions
                       on dynamic dependencies
       [-z help ]      print this usage message
       [-z ignore | record]
                       ignore|record unused dynamic dependencies
       [-z initarray=function]
                       name of function to be appended to the .initarray
       [-z initfirst]  mark object to indicate that its .init section should
                       be executed before the .init section of any other
       [-z interpose]  dynamic object is to be an `interposer' on direct
       [-z lazyload | nolazyload]
                       enable|disable delayed loading of shared object
       [-z ld32=arg1,arg2,...]
                       define arguments applicable to the 32-bit class of ld(1)
       [-z ld64=arg1,arg2,...]
                       define arguments applicable to the 64-bit class of ld(1)
       [-z loadfltr]   mark filter as requiring immediate loading of its
                       filtees at runtime
       [-z muldefs]    allow multiply-defined symbols
       [-z nocompstrtab]
                       disable compression of string tables
       [-z nodefs]     allow undefined symbol references
       [-z nodefaultlib]
                       mark object to ignore any default library search path
       [-z nodelete]   mark object as non-deletable
       [-z nodlopen]   mark object as non-dlopen()'able
       [-z nodump]     mark object as non-dldump()'able
       [-z now]        mark object as requiring non-lazy binding
       [-z nopartial]  expand any partially initialized symbols
       [-z noversion]  don't record any version sections
       [-z origin]     mark object as requiring $ORIGIN processing
       [-z preinitarray=function]
                       name of function to be appended to the .preinitarray
       [-z redlocsym]  reduce local syms in .symtab to a minimum
       [-z rescan]     rescan archive list until no further member
                       extraction occurs
       [-z text]       disallow output relocations against text
       [-z textoff]    allow output relocations against text
       [-z textwarn]   warn if there are relocations against text
       [-z verbose]    generate warnings for suspicious processings
collect2: ld returned 1 exit status
gmake[2]: *** [libasteriskssl.so.1] Error 1
gmake[1]: *** [main] Error 2
gmake[1]: Leaving directory `/usr/local/src/asterisk/asterisk-11.0.0-rc2'
gmake: *** [_cleantest_all] Error 2
Comments:By: Walter Doekes (wdoekes) 2012-10-18 03:46:36.277-0500

What does this say?

make NOISY_BUILD=yes

By: Matt Jordan (mjordan) 2012-10-18 08:26:30.615-0500

(Only mildly related: since 11.0.0 is in RC status, its okay to file issues against the unreleased version '11.0.0')

By: Jeremy Kister (jkister) 2012-10-18 13:56:32.064-0500

make_noisy-1.txt is before editing makeopts, where HOST_CC and BUILD_CC=cc

make_noisy-2.txt is after editing makeopts, where i manually set HOST_CC and BUILD_CC=gcc

By: Walter Doekes (wdoekes) 2012-10-19 00:26:57.322-0500

gcc calls de solaris linker => explodes in your face

when modifying BUILD_CC, you should also set LD_ALTEXEC=/usr/sfw/bin/gld (or something)


Your bug report is still valid though: asterisk 11 fails to compile without alterations. But it may not get priority by Digium devs. Any patches you can provide that make things work on Solaris but don't break the build on other platforms, are appreciated.

By: Jeremy Kister (jkister) 2012-10-19 00:33:29.858-0500

ah ha; setting LD to gld does solve the problem.  i had assumed 1.8 was happy with Sun's ld and that 11 wasnt.  

The problem is actually that configure isn't finding/using/preferring gcc/gld.

of note, asterisk 1.8 didn't require me to edit makeopts on Solaris 10.

By: Rusty Newton (rnewton) 2012-10-29 17:07:50.774-0500

Thanks for following up Jeremy. Did this have any affect on the issue in ASTERISK-20576 or is that a different problem?

The core team doesn't officially provide support for compilation on non-Linux platforms, but if you can provide a patch and it's easy to throw in, then the devs will be more likely to do so.  We'll acknowledge the issue in case any community dev wants to help out.