<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: couldn't compile with libraries projects in LPC Microcontrollers</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/couldn-t-compile-with-libraries-projects/m-p/580853#M20311</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by C6H6 on Fri Apr 15 09:07:03 MST 2016&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;This problem might be missing extern "C" guards.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;This means "Use C style linking instead of C++ style linking".&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Go to header files include function: Chip_SWM_MovablePinAssign, and add this code after #include header&amp;nbsp; guards (Ex. #ifdef __SPI_17XX_40XX_H_)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;#ifdef __cplusplus
extern "C" {
#endif&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;And go to #endif for #include guards, (Ex. #endif /* __SPI_17XX_40XX_H_ */) and add this line.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;#ifdef __cplusplus
}
#endif&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Then, linker recognizes function 'Chip_SWM_MovablePinAssign' successfully.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;You will add these 'extern "C"' s for all header that linker fails to find symbols.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I hope this tip can help you.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Best Regards.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 15 Jun 2016 20:20:55 GMT</pubDate>
    <dc:creator>lpcware</dc:creator>
    <dc:date>2016-06-15T20:20:55Z</dc:date>
    <item>
      <title>couldn't compile with libraries projects</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/couldn-t-compile-with-libraries-projects/m-p/580852#M20310</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by miccio on Fri Apr 15 08:12:26 MST 2016&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hello fellow LPC-users,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I have a workspace composed of the following projects:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;- a hardware abstraction layer project (C++ static library project) -&amp;gt; HAL&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;- a modules/middleware project (C++ static library project) -&amp;gt; MOD&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;- a final application (C++ project) -&amp;gt; MAIN&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;- the LPCOpen chip layer (lpc_chip_15xx) -&amp;gt; LPCOPEN&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The following graph expresses the relation between these projects:&lt;/SPAN&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MAIN_______
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /&amp;nbsp;&amp;nbsp;&amp;nbsp; \&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; \
&amp;nbsp;&amp;nbsp;&amp;nbsp; MOD&amp;nbsp;&amp;nbsp; HAL&amp;nbsp; LPCOPEN
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |
&amp;nbsp;&amp;nbsp;&amp;nbsp; HAL LPCOPEN
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |
&amp;nbsp; LPCOPEN
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Compilation of both HAL and MOD occurs successfully, however when I try to compile the MAIN project, I get these linker errors:&lt;/SPAN&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
Building target: lpc1549_main.axf
Invoking: MCU C++ Linker
arm-none-eabi-c++ -nostdlib -L"WORKSPACEPATH/lpc_chip_15xx/Debug" -L"WORKSPACEPATH/CMSIS_DSPLIB_CM3/lib" -L"WORKSPACEPATH/lpc1549_modules/Debug" -L"WORKSPACEPATH/lpc1549_hal/Debug" -Xlinker -Map="lpc1549_main.map" -Xlinker --gc-sections -Xlinker -print-memory-usage -mcpu=cortex-m3 -mthumb -T "lpc1549_main_Debug.ld" -o "lpc1549_main.axf"&amp;nbsp; ./src/sys/cr_cpp_config.o ./src/sys/cr_startup_lpc15xx.o ./src/sys/crp.o ./src/sys/sysinit.o&amp;nbsp; ./src/main.o&amp;nbsp;&amp;nbsp; -llpc_chip_15xx -lCMSIS_DSPLIB_CM3 -llpc1549_modules -llpc1549_hal
WORKSPACEPATH/lpc1549_hal/Debug/liblpc1549_hal.a(spi.o): In function `Chip_SWM_MovablePortPinAssign':
WORKSPACEPATH/lpc_chip_15xx/inc/swm_15xx.h:234: undefined reference to `Chip_SWM_MovablePinAssign'
WORKSPACEPATH/lpc1549_hal/Debug/liblpc1549_hal.a(spi.o): In function `SPI::init(PortPin, PortPin, PortPin, PortPin, LPC_SPI_T*)':
WORKSPACEPATH/lpc1549_hal/Debug/../src/spi.cpp:63: undefined reference to `Chip_SPI_Init'
WORKSPACEPATH/lpc1549_hal/Debug/liblpc1549_hal.a(spi.o): In function `SPI::initSettings()':
WORKSPACEPATH/lpc1549_hal/Debug/../src/spi.cpp:114: undefined reference to `Chip_SPI_CalClkRateDivider'
WORKSPACEPATH/lpc1549_hal/Debug/../src/spi.cpp:131: undefined reference to `Chip_SPI_SetConfig'
WORKSPACEPATH/lpc1549_hal/Debug/../src/spi.cpp:132: undefined reference to `Chip_SPI_DelayConfig'
collect2: error: ld returned 1 exit status
make: *** [lpc1549_main.axf] Error 1
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;It is basically complaining about any non-inlined LPCOpen function used inside those HAL project functions used in the MAIN project (hope it's not too convoluted).&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;It would also complain about any non-inlined LPCOpen function used inside those HAL project functions used in the MOD project functions used in the MAIN project (ok, that sure is a little convoluted, but should be easy to get from the graph above).&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&lt;SPAN&gt;The projects have been created using the LPCXpresso wizard, and the libraries have been included using this guideline: &lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="https://community.nxp.com/external-link.jspa?url=https%3A%2F%2Fwww.lpcware.com%2Fcontent%2Ffaq%2Flpcxpresso%2Fcreating-linking-library-projects" rel="nofollow noopener noreferrer" target="_blank"&gt;https://www.lpcware.com/content/faq/lpcxpresso/creating-linking-library-projects&lt;/A&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Any idea about what could be causing the issue?&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks in advance and have a nice weekend! &lt;SPAN class="lia-unicode-emoji" title=":slightly_smiling_face:"&gt;&lt;LI-EMOJI id="lia_slightly-smiling-face" title=":slightly_smiling_face:"&gt;&lt;/LI-EMOJI&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 20:20:54 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/couldn-t-compile-with-libraries-projects/m-p/580852#M20310</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T20:20:54Z</dc:date>
    </item>
    <item>
      <title>Re: couldn't compile with libraries projects</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/couldn-t-compile-with-libraries-projects/m-p/580853#M20311</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by C6H6 on Fri Apr 15 09:07:03 MST 2016&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;This problem might be missing extern "C" guards.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;This means "Use C style linking instead of C++ style linking".&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Go to header files include function: Chip_SWM_MovablePinAssign, and add this code after #include header&amp;nbsp; guards (Ex. #ifdef __SPI_17XX_40XX_H_)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;#ifdef __cplusplus
extern "C" {
#endif&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;And go to #endif for #include guards, (Ex. #endif /* __SPI_17XX_40XX_H_ */) and add this line.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;#ifdef __cplusplus
}
#endif&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Then, linker recognizes function 'Chip_SWM_MovablePinAssign' successfully.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;You will add these 'extern "C"' s for all header that linker fails to find symbols.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I hope this tip can help you.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Best Regards.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 20:20:55 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/couldn-t-compile-with-libraries-projects/m-p/580853#M20311</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T20:20:55Z</dc:date>
    </item>
    <item>
      <title>Re: couldn't compile with libraries projects</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/couldn-t-compile-with-libraries-projects/m-p/580854#M20312</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by miccio on Tue Apr 26 03:42:42 MST 2016&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi C6H,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;and thank you for the hint.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I went through the header files and they all seem to include the extern "C" guards.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I also thought about a name mangling issue, but it seems like the linker is complaining about something else :(&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Any other idea?&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks in advance!&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 20:20:55 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/couldn-t-compile-with-libraries-projects/m-p/580854#M20312</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T20:20:55Z</dc:date>
    </item>
    <item>
      <title>Re: couldn't compile with libraries projects</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/couldn-t-compile-with-libraries-projects/m-p/580855#M20313</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by miccio on Tue Apr 26 05:05:39 MST 2016&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi again everyone,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I finally figured out the problem and now I can successfully compile the project! &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I am writing here my discoveries for future reference's sake &lt;SPAN class="lia-unicode-emoji" title=":winking_face:"&gt;&lt;LI-EMOJI id="lia_winking-face" title=":winking_face:"&gt;&lt;/LI-EMOJI&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;According to the &lt;/SPAN&gt;&lt;A href="http://https://gcc.gnu.org/onlinedocs/gcc/Link-Options.html" rel="nofollow noopener noreferrer" target="_blank"&gt;GCC docs&lt;/A&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;BR /&gt;&lt;HR /&gt;&lt;SPAN style="color: #0000ff;"&gt;&lt;STRONG&gt;Quote: &lt;/STRONG&gt;&lt;BR /&gt;&lt;BR /&gt;-llibrary&lt;BR /&gt;-l library&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Search the library named library when linking. &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (The second alternative with the library as a separate argument&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; is only for POSIX compliance and is not recommended.)&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; It makes a difference where in the command you write this option;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; the linker searches and processes libraries and object files in the&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; order they are specified.&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Thus, `foo.o -lz bar.o' searches library `z' after file foo.o but&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; before bar.o. If bar.o refers to functions in `z', those functions&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; may not be loaded.&lt;BR /&gt;&lt;/SPAN&gt;&lt;HR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Unfortunately LPCXpresso's "smart update" ain't that smart, so you have to sort the libraries by yourself &lt;SPAN class="lia-unicode-emoji" title=":face_with_tongue:"&gt;&lt;LI-EMOJI id="lia_face-with-tongue" title=":face_with_tongue:"&gt;&lt;/LI-EMOJI&gt;&lt;/SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I found that the easiest and fastest way to do so is by means of editing the .cproject file inside the main project folder: all it takes is to reorder the listOptionValue entries from&lt;/SPAN&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
option [...]
listOptionValue builtIn="false" value="&amp;amp;quot;${workspace_loc:/${ProjName}/inc}&amp;amp;quot;"
listOptionValue builtIn="false" value="&amp;amp;quot;${workspace_loc:/lpc_chip_15xx/inc}&amp;amp;quot;"
listOptionValue builtIn="false" value="&amp;amp;quot;${workspace_loc:/CMSIS_DSPLIB_CM3/inc}&amp;amp;quot;"
listOptionValue builtIn="false" value="&amp;amp;quot;${workspace_loc:/lpc1549_modules/inc}&amp;amp;quot;"
listOptionValue builtIn="false" value="&amp;amp;quot;${workspace_loc:/lpc1549_hal/inc}&amp;amp;quot;"
/option
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;SPAN&gt;to&lt;/SPAN&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
option [...]
listOptionValue builtIn="false" value="&amp;amp;quot;${workspace_loc:/${ProjName}/inc}&amp;amp;quot;"
listOptionValue builtIn="false" value="&amp;amp;quot;${workspace_loc:/CMSIS_DSPLIB_CM3/inc}&amp;amp;quot;"
listOptionValue builtIn="false" value="&amp;amp;quot;${workspace_loc:/lpc1549_modules/inc}&amp;amp;quot;"
listOptionValue builtIn="false" value="&amp;amp;quot;${workspace_loc:/lpc1549_hal/inc}&amp;amp;quot;"
listOptionValue builtIn="false" value="&amp;amp;quot;${workspace_loc:/lpc_chip_15xx/inc}&amp;amp;quot;"
/option
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Please note that this has to be done for all the occurrences of the libraries - there should be a dozen or so.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Happy coding!!&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 20:20:56 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/couldn-t-compile-with-libraries-projects/m-p/580855#M20313</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T20:20:56Z</dc:date>
    </item>
    <item>
      <title>Re: couldn't compile with libraries projects</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/couldn-t-compile-with-libraries-projects/m-p/580856#M20314</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;bump&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 19 Jun 2016 01:08:29 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/couldn-t-compile-with-libraries-projects/m-p/580856#M20314</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-19T01:08:29Z</dc:date>
    </item>
  </channel>
</rss>

