This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Building Linux applications/libs in GCC emulation mode

  • Note: This was originally posted on 25th May 2011 at http://forums.arm.com

    bump

    I managed to figure out more or less the first point of my previous post.
    But I still get the linker errors and the crash with O3 optimizations.
    Does anyone have any idea?

    Any leads would be appreciated as I have just a few days left of my evaluation copy of the DS-5 :).

    Thanks
  • Note: This was originally posted on 27th May 2011 at http://forums.arm.com

    Maybe this will help someone ... as it seems that this thread is becoming a monologue

    After updating to the latest CodeSourcery toolchain for ARM Linux I got rid of most of the warnings except for the below one

    Warning: L6439W: Multiply defined Global Symbol LogProxy::LogProxy(int)  defined in invalid_group(XXXXX.o) rejected in favor of Symbol defined in  i._ZN8LogProxyC1Ei(YYYYY.o).

    I know what the message means(or at least I suppose I know) but I cannot figure out why I'm getting it - it's
    really, really confusing as I do not get it with GCC. So the best guess is that the ARM linker tries to link my
    libraries/object files multiple times. How can I see what exactly is the command line of the armcc/armlink in
    GCC emulation mode? I mean the real command line - the one after the GCC emulation takes place,
    because I have the one generated by the build system which does not tell me much.

    Thanks
  • Note: This was originally posted on 2nd June 2011 at http://forums.arm.com

    Hello Celavek,
    First, I can confirm you are not talking to yourself.

    Looking at your warning, I would understand that despite it, you still get a proper working code.
    The way I understand it (and I have not used DS-5 but other tools in the past) is that you have a double declaration.
    In my old programmers days (!), it meant that I didn't use the EXTERN word in the second declaration and was therefore ending with two different variables with the same name... and was getting a linker failure.
    Here, I think the linker understands that names are the same and chose one declaration over the other one.

    Have you search your project for all declarations of that symbol and is it only declared once?
    Can you still try?

    Kindly, Alban
  • Note: This was originally posted on 2nd June 2011 at http://forums.arm.com

    [font=arial, verdana, tahoma, sans-serif][size=2]I have played around with this... it doesn't look like armcc translates any of the -Wxyz warning options from gcc (except -Wall).  But, it seems to handle -f* options where its has equivalentsI think that warning L6238E is harmless in almost all cases; it is given by armlink because libgcc and other GCC/GNU assembler-built libraries don't contain ARM build attributes for marking that 8-byte stack alignment is required/preserved. You could just suppress this globally by setting ARMCC50_LINKOPT="--diag_suppress=6238".  Warning L6439W is again harmless; it'll most likely be generated for out-of-line copies of inline functions in Comdat groups, where GCC hasn't strictly followed ELF rules about the groups and therefore armlink is rejecting that copy and instead using a copy from the same Comdat group that was generated in one of the armcc-compiled object files.Updating to the latest GNU toolchain is also worth a punt.

    [/size][/font]