[Scons-users] Cyclic references between lib archives

Ivan Kravets me at ikravets.com
Wed Feb 4 16:55:49 EST 2015


> On Feb 4, 2015, at 23:26, Dirk Bächle <tshortik at gmx.de> wrote:
> 
> Hi Ivan,
> 
> On 04.02.2015 21:35, Ivan Kravets wrote:
>> Hi,
>> 
>> Can someone explain me how to setup cyclic references between lib archives?
>> We can tell gcc-linker which libs should be "cyclic" via --start-group archives --end-group.
>> 
>> I use gcc for linking and these options should pass to "linker", not to "compiler". In this case it looks like:
>> -Wl,--start-group archives -Wl,--end-group
>> 
> 
> look what Google found:
> 
>  http://scons.1086193.n5.nabble.com/begin-group-LIBS-end-group-td18246.html
> 
> Hope this helps...
> 
> Best regards,
> 
> Dirk
I tried it early. It doesn't work because the order of options to gcc is incorrect. See example based on your link:
    deplibs = [.....]
    corelibs=["m"]
    env.(STATIC_LIBS=deplibs)

    env.Append(
        LINKFLAGS=[
            Split('-Wl,--start-group $STATIC_LIBS -Wl,--end-group')
        ],
    )
    return env.Program(
        join("$BUILD_DIR", "firmware"),
        [src.GlobCXXFiles(vdir) for vdir in vdirs],
        LIBS=corelibs,
        LIBPATH="$BUILD_DIR",
        PROGSUFFIX=".elf")     

Please compare:

Doesn't work:
avr-g++ -o .pioenvs/autogen_uno/firmware.elf -Os -mmcu=atmega2560 -Wl,--gc-sections -Wl,--start-group .pioenvs/autogen_uno/libAdafruit_LED_Backpack_ID128.a .pioenvs/autogen_uno/libAdafruit_GFX_ID13.a .pioenvs/autogen_uno/libWire.a .pioenvs/autogen_uno/libffft.a -Wl,--end-group .pioenvs/autogen_uno/src/Piccolo.o -L.pioenvs/autogen_uno .pioenvs/autogen_uno/libFrameworkArduino.a -lm

I changed command manually and this works good:
avr-g++ -o .pioenvs/autogen_uno/firmware.elf -Os -mmcu=atmega2560 -Wl,--gc-sections .pioenvs/autogen_uno/src/Piccolo.o -L.pioenvs/autogen_uno -Wl,--start-group .pioenvs/autogen_uno/libAdafruit_LED_Backpack_ID128.a .pioenvs/autogen_uno/libAdafruit_GFX_ID13.a .pioenvs/autogen_uno/libWire.a .pioenvs/autogen_uno/libffft.a -Wl,--end-group  .pioenvs/autogen_uno/libFrameworkArduino.a -lm

======

I mean, how I can put some "LIBS" which are passed to env.Program to --start-group/--end-group ?



With best regards, Ivan Kravets
   - "Creativity comes from talent and never from knowledge" (c)
________________________
http://www.ikravets.com






More information about the Scons-users mailing list