This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Errors while importing a legacy 3.3 project into CCSv5.1

Other Parts Discussed in Thread: CCSTUDIO

Hello all,

After importing multiple legacy 3.3 projects into a CCSv5.1 workspace, I get the following errors:

1. 'rts16etiabi.lib' has incompatible ABI (I'm using COFF ABI with CGT tools 4.1.4 as in CCSv3.3)

2. Symbol defined multiple times in ai.obj and ai.lib

These errors sometimes appeared in CCSv3.3, but a clean build worked for me, it doesn't seem to work in CCSv5.1, what could be wrong? Can you please suggest something? 

  • Jasmeet Kaur97544 said:
    . 'rts16etiabi.lib' has incompatible ABI (I'm using COFF ABI with CGT tools 4.1.4 as in CCSv3.3)



    Even within COFF ABI there are 2 options for ARM - tiabi (an older version) and ti_arm9_abi (the default version starting with codegen tools 4.1.0). In the project settings, make sure that the ABI is set to tiabi if you want to link in with the rts library that is built for tiabi. The option should be under Compiler ->Runtime Model Options.

    Jasmeet Kaur97544 said:
    Symbol defined multiple times in ai.obj and ai.lib

    In what order are these files getting linked? If ai.obj appears first on the link command line, I would expect it to resolve symbol references to this file first and not try to resolve it again from ai.lib. Is ai.obj part of ai.lib? If so, you may want to remove it from ai.lib and just leave it as a separate .obj on the command line.

     

  • Hi Jasmeet,

    what steps did you take to do the import?  What are your project settings?   What do you see set under Project->Properties->General ... Runtime Support library?  It seems this setting might not be correct and referencing the eabi library causing issues.

    Best REgards,

    LIsa

  • I used the import wizard to import legacy 3.3 multiple projects in the workspace, In the General, I have set little-endian, compiler tool version 4.1.4, output format leagcy COFF, Under the Runtime Model Options, I select tiabi. I hope this is correct, as the same settings have been used in CCSv3.3

  • Those settings look ok. Can you copy and paste the full output of the CCS build console so I can take a look at the complete set of build options?

  • Here is the build configuration:

    **** Build of configuration Build_45NM for project includegen ****

    C:\ti\ccsv5\utils\bin\gmake -k all

    'Building file: D:/threadx arm7 gnss/source/includepreproc/includegen/includegen.c'

    'Invoking: ARM Compiler'

    "C:/CCStudio_v3.3/tms470/cgtools/bin/cl470" --define="RTOS_NUCLEUS" --define="MMGPS_CHIP_VERSION=21" --define="C_OSC_CAL_COMPARISON" --define="ENABLE_TI_ADDONS" --define="GPS5300AI2_BUILD" --define="POD_TESTEN" --include_path="C:/CCStudio_v3.3/tms470/cgtools/include" --include_path="C:/ti/xdais_7_21_01_07/packages/ti/xdais" --include_path=".." --include_path="D:/threadx arm7 gnss ccsv5/source/threadx/include" --include_path="D:/threadx arm7 gnss ccsv5/source" --include_path="D:/threadx arm7 gnss ccsv5/source/me" --include_path="D:/threadx arm7 gnss ccsv5/source/me/me_etc" --include_path="D:/threadx arm7 gnss ccsv5/source/me/cc" --include_path="D:/threadx arm7 gnss ccsv5/source/me/mc" --include_path="D:/threadx arm7 gnss ccsv5/source/pe" --include_path="D:/threadx arm7 gnss ccsv5/source/pe/pe_etc" --include_path="D:/threadx arm7 gnss ccsv5/source/pe/cd" --include_path="D:/threadx arm7 gnss ccsv5/source/libs" --include_path="D:/threadx arm7 gnss ccsv5/source/SampleApps/AI2/ai2" --include_path="D:/threadx arm7 gnss ccsv5/source/SampleApps/AI2/ai" --include_path="D:/threadx arm7 gnss ccsv5/source/SampleApps/AI2/lp" --include_path="D:/threadx arm7 gnss ccsv5/source/libs/bist" --include_path="D:/threadx arm7 gnss ccsv5/source/libs/rtccalib" --include_path="D:/threadx arm7 gnss ccsv5/source/libs/sio" --include_path="D:/threadx arm7 gnss ccsv5/source/libs/i2c" --include_path="D:/threadx arm7 gnss ccsv5/source/libs/newcalib" --include_path="D:/threadx arm7 gnss ccsv5/source/SampleApps/meif" --symdebug:dwarf --diag_warning=225 --display_error_number --abi=tiabi --little_endian --silicon_version=4 --thumb_state --auto_inline=0 --preproc_with_compile --preproc_dependency="includegen.pp" "D:/threadx arm7 gnss/source/includepreproc/includegen/includegen.c"

  • Hi Jasmeet,

    have you tried setting the runtime support library to automatic?

    Best Regards,
    Lisa

  • Jasmeet,

    Please post the full output of the console (you can save it to a text file and attach it). I'd like to see the full build output as well as the error messages which are thrown by the linker.

  • Yes Lisa, tried that as well, but in vain.

  • I'm also getting this type of error for several symbols (mc_pmatch.c is a part of the project mc):

    error: symbol $GetBitMask_ind is defined multiple times: mc_pmatch.obj

    (C:/GNSS_45nm/Private/source/product/ti/GPS_ROM/projectfiles/mc/Build_45NM/mc.lib) and C:\GNSS_45nm\Private\source\product\ti\GPS_ROM\projectfiles\mc\Build_45NM\mc_pmatch.obj

  • AartiG,

    Sorry, but the number of errors are so large, that the final console only shows the errors, the build console I copied earlier was of another similar project.

    Regards,

    Jasmeet

  • Jasmeet,

    These errors are coming from the linker and what you sent earlier was only the compile command, so it doesn't give sufficient detail to be able to really help with this. We really need to be able to look at the link command (everything following "Invoking Linker" in the build console) and also the errors generated in order to provide a more direct/helpful answer.

    If the console output is getting too large, you can increase the number of lines it outputs. In CCS 5.1, if you go into Window->Preferences-?C/C++->Build->Console, you can change the number of lines for the console output. You can also right-click in the console view, choose Select All and copy/paste it into a file. Maybe these techniques might help you capture a more complete output. But in order to provide more specific suggestions we really need to be able to see the linker command and errors generated.

  • 0537.console.txt

    Please find the attached file, containing the console output.

    The attached console shows the build output of the project TILinkAll, which has 4 source files and is an executable that links all the previous .lib files generated by the rest of the projects in the workspace. I have added a particular Link Order and added all the other projects as 'Dependencies' of TILinkAll in the project properties options.

  • Jasmeet,

    In your build log, there is one thing I seethat could be causing the issue. 

    You have the option: --obj_directory="c:/GNSS_45nm/Private/source/product/ti/GPS_ROM/projectfiles/TILinkAll/Build_45NM" which puts the obj files in this specific folder. Are there also other .obj files in that folder other than the 4 files you are building?   It looks CCS is picking up other .objs from this location and then finding redefined symbols for them in library files as well.

    Could you try removing the --obj_directory option? In other words, under Compiler->Directory Specifier, set Mode to "Automatic" which disables the --obj_directory, and then do a clean and rebuild.

    One more thing I noticed is that rts16etiabi.lib appears twice on the link command, once with the --library option and once probably from you adding it explicitly to the project. I would suggest removing one of them.

    Let us know how this goes.

  • Thanks AartiG. :)

    Setting the mode to automatic helped in the removal of multiply defined symbols, but I had the object directory path set in CCSv3.3, but it didn't cause any error there, Do CCSv3.3 and 5.1 deal differently with this?

    Now, the problem is that the linker command file is trying to access the path (as defined earlier) 'C:\GNSS_45nm\Private\source\product\ti\GPS_ROM\projectfiles\mc\Build_45NM\mc_searchengine.obj', but since I have changed the option to automatic, the file 'mc_searchengine.obj' is getting created in the new path 'D:\threadx arm7 gnss ccsv5\New Folder\mc\Build_45NM\mc_searchengine.obj'.

    If I try to change the path in the .cmd file, it throws up an error saying 'D:\threadx.obj' not found, probably because of the spaces in the path name, but I cannot rename the whole path now, as it will lead to changing of all the include paths. What should I do now?   

    <Linking>

    >> C:\DOCUME~1\x0176474\LOCALS~1\Temp\TI7363, line 30: error:

    can't find input file 'Build_45NM/../fpu.lib'

    >> Gnss_45nmLink.cmd: error: system error, can't open file

    'C:\GNSS_45nm\Private\source\product\ti\GPS_ROM\projectfiles\mc\Build_45NM\mc_searchengine.obj' for input: No such file or directory

     

     

     

  • Jasmeet Kaur97544 said:
    Do CCSv3.3 and 5.1 deal differently with this?

    In Eclipse, all files within the project folder are considered part of the project. So if you have other .obj files within your project folder they will be pulled into the link. You need to take a careful look at where your .obj files are located and which ones are required to be linked in, and modify things accordingly. You should still be able to use the --obj_directory option in CCSv5 to specify which directory to place the object files in, and CCS should be able to detect it fine. All I was saying earlier was that the multiply defined symbols were coming because they were found in both the .lib and .obj.

    Jasmeet Kaur97544 said:

    >> Gnss_45nmLink.cmd: error: system error, can't open file

    'C:\GNSS_45nm\Private\source\product\ti\GPS_ROM\projectfiles\mc\Build_45NM\mc_searchengine.obj' for input: No such file or directory

    Does it not work if you enclose the path in quotes?

  • Thank you for your support, finally I built the .out file :)