Updated to include user defined static lib files in the Linker object files path.

### Description

This is to fix linker not finding symbols declared in object files inside static library files.

For this case throwing:-

> rm-none-eabi-g++: error: unrecognized command line option '--wrap=main'; did you mean '--warn-main'?

For this case to include libmbed.a which contains

mbed_alloc_wrappers.o:
         U __real__calloc_r
         U __real__free_r
         U __real__malloc_r
         U __real__memalign_r
         U __real__realloc_r
00000000 T __wrap__calloc_r
00000000 T __wrap__free_r
00000000 T __wrap__malloc_r
00000000 T __wrap__memalign_r
00000000 T __wrap__realloc_r
00000000 T free_wrapper
00000000 T malloc_wrapper
00000000 T mbed_stats_heap_get
         U memset

This patch also changed the library order to system and then user.

-lstdc++ -lsupc++ -lm -lc -lgcc -lnosys -lmbed

Resolves: #7155

### Pull request type

    [ x ] Fix
    [ ] Refactor
    [ ] Target update
    [ ] Feature
    [ ] Breaking change
pull/7758/head
Phyo Kyaw 2018-08-10 15:16:14 +01:00
parent 2a824a1ceb
commit 87304f8812
3 changed files with 13 additions and 4 deletions

View File

@ -326,10 +326,10 @@
{% endfor %}
</option>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.libs.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.libs" valueType="libs">
{% for lib in opts['ld']['user_libraries'] %}
{% for lib in opts['ld']['system_libraries'] %}
<listOptionValue builtIn="false" value="{{lib}}"/>
{% endfor %}
{% for lib in opts['ld']['system_libraries'] %}
{% for lib in opts['ld']['user_libraries'] %}
<listOptionValue builtIn="false" value="{{lib}}"/>
{% endfor %}
</option>
@ -337,6 +337,9 @@
{% for path in opts['ld']['object_files'] %}
<listOptionValue builtIn="false" value="&quot;${ProjDirPath}/{{path}}&quot;"/>
{% endfor %}
{% for path in opts['ld']['user_library_files'] %}
<listOptionValue builtIn="false" value="&quot;${ProjDirPath}/{{path}}&quot;"/>
{% endfor %}
</option>
{% if opts['ld']['gcsections'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.gcsections.{{u.id}}" name="Remove unused sections (-Xlinker --gc-sections)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.gcsections" value="true" valueType="boolean"/>

View File

@ -326,10 +326,10 @@
{% endfor %}
</option>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.libs.{{u.id}}" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.libs" valueType="libs">
{% for lib in opts['ld']['user_libraries'] %}
{% for lib in opts['ld']['system_libraries'] %}
<listOptionValue builtIn="false" value="{{lib}}"/>
{% endfor %}
{% for lib in opts['ld']['system_libraries'] %}
{% for lib in opts['ld']['user_libraries'] %}
<listOptionValue builtIn="false" value="{{lib}}"/>
{% endfor %}
</option>
@ -337,6 +337,9 @@
{% for path in opts['ld']['object_files'] %}
<listOptionValue builtIn="false" value="&quot;${ProjDirPath}/{{path}}&quot;"/>
{% endfor %}
{% for path in opts['ld']['user_library_files'] %}
<listOptionValue builtIn="false" value="&quot;${ProjDirPath}/{{path}}&quot;"/>
{% endfor %}
</option>
{% if opts['ld']['gcsections'] %}
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.gcsections.{{u.id}}" name="Remove unused sections (-Xlinker --gc-sections)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.gcsections" value="true" valueType="boolean"/>

View File

@ -90,7 +90,9 @@ class GNUARMEclipse(Exporter):
# TODO: use some logger to display additional info if verbose
libraries = []
library_files = []
for lib in self.libraries:
library_files.append(self.filter_dot(lib))
l, _ = splitext(basename(lib))
libraries.append(l[3:])
@ -178,6 +180,7 @@ class GNUARMEclipse(Exporter):
opts['ld']['object_files'] = objects
opts['ld']['user_libraries'] = libraries
opts['ld']['user_library_files'] = library_files
opts['ld']['system_libraries'] = self.system_libraries
opts['ld']['script'] = join(id.capitalize(),
"linker-script-%s.ld" % id)