<div dir="ltr"><div dir="ltr"><br></div><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Sep 7, 2020 at 2:40 PM Heinz Junkes <<a href="mailto:junkes@fhi-berlin.mpg.de">junkes@fhi-berlin.mpg.de</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><br>
> On 7. Sep 2020, at 21:18, Joel Sherrill <<a href="mailto:joel@rtems.org" target="_blank">joel@rtems.org</a>> wrote:<br>
> <br>
> <br>
> It needs to be in an object file defined between   rtemsTestData.o and    -lCom. Otherwise, there are configuration symbols lacking and the dummy configuration will get pulled in.<br>
> <br>
> <br>
<br>
Unfortunately I do not understand that. These are all object files?<br></blockquote><div><br></div><div>The .o files that constitute your application are the base of what gets pulled in. They have unresolved dependencies and those unresolved dependencies are attempted to be resolved with the libraries (-l).  The configuration structures and variables generated by confdefs.h are part of the application .o's. In librtemscpu.a in RTEMS < 5.x, there is a "dummy configuration" which is sufficient for simple applications and satisfying link probes when you build with a BSP. But if you end up only partially declaring the configuration data items needed in your application .o's, then the linker will try to satisfy the unresolved by pulling in from the libraries. Since there is a rather complete configuration declaration in dummy, it is overlapping the configuration you did in your application and you are getting the duplicate symbols.</div><div><br></div><div>I think ensuring that the bdbuf symbol is defined in an object listed before any libraries will ensure it is forced in before a dummy version from the library is pulled in.</div><div><br></div><div>Another approach which is a bit more brutal is to delete dummy.o from librtemscpu.a and then you will just get undefined symbols for the missing configuration elements. Copy the library so you can restore it. I think this command should do the trick:</div><div><br></div><div>i386-rtems5-ar dv librtemscpu.a dummy.o<br></div><div><br></div><div>Since some of your configuration is in -lCom, I don't know how the rtems_config.o in there is referenced. Normally I would expect the RTEMS Configuration elements to be in an object file. You may need to reference an undefined symbol in rtems_config.o to force the link.</div><div><br></div><div>But you have RTEMS Configuration structures in two object files in two separate libraries and they conflict. </div><div><br></div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
[h1@earth test (7.0 *)]$ make -C O.RTEMS-pc386-qemu -f ../Makefile TOP=../../../..     T_A=RTEMS-pc386-qemu install<br>
make: Entering directory '/home/h1/GSOC/rtems5_epics7/QtC-epics-base/modules/libcom/test/O.RTEMS-pc386-qemu'<br>
/home/travis/.rtems/bin/i386-rtems4.10-g++ -B/home/travis/.rtems/i386-rtems4.10/pc686/lib/ -specs bsp_specs -qrtems   -o libComTestHarness -static -L/home/h1/GSOC/rtems5_epics7/QtC-epics-base/lib/RTEMS-pc386-qemu       -L/home/travis/.rtems/i386-rtems4.10/pc686/lib/    -mtune=pentiumpro -u POSIX_Init -Wl,-Ttext,0x100000         epicsTypesTest.o epicsInlineTest1.o epicsInlineTest2.o epicsInlineTest3.o epicsInlineTest4.o epicsCalcTest.o epicsAlgorithmTest.o epicsMathTest.o epicsMMIOTest.o epicsEllTest.o epicsEnvTest.o epicsEnvUnsetTest.o epicsErrlogTest.o epicsStdioTest.o epicsStdlibTest.o epicsSockResolveTest.o epicsStringTest.o epicsTimeTest.o epicsThreadTest.o epicsThreadClassTest.o epicsThreadOnceTest.o epicsThreadPriorityTest.o epicsThreadPrivateTest.o epicsThreadHooksTest.o epicsThreadPoolTest.o epicsExitTest.o epicsTimerTest.o ringPointerTest.o ringBytesTest.o epicsEventTest.o epicsMutexTest.o epicsSpinTest.o epicsAtomicTest.o macDefExpandTest.o cvtFastTest.o macLibTest.o aslibtest.o taskwdTest.o blockingSockTest.o epicsMessageQueueTest.o epicsStackTraceTest.o ipAddrToAsciiTest.o osiSockTest.o epicsRunLibComTests.o epicsThreadPerform.o epicsMaxThreads.o buckTest.o epicsAtomicPerform.o cvtFastPerform.o epicsTimeZoneTest.o rtemsTestHarness.o rtemsTestData.o   -lCom       -Wl,--gc-sections -lm -lrtemsCom -lc -lrtemscpu -lrtemsCom -lCom -lnfs -lm -lgcc<br>
/home/h1/GSOC/rtems5_epics7/QtC-epics-base/lib/RTEMS-pc386-qemu/librtemsCom.a(rtems_config.o):(.data+0x0): multiple definition of `rtems_libio_init_helper'<br>
/home/travis/.rtems/i386-rtems4.10/pc686/lib//librtemscpu.a(dummy.o):(.data+0x0): first defined here<br>
/home/h1/GSOC/rtems5_epics7/QtC-epics-base/lib/RTEMS-pc386-qemu/librtemsCom.a(rtems_config.o):(.data+0x4): multiple definition of `rtems_libio_supp_helper'<br>
/home/travis/.rtems/i386-rtems4.10/pc686/lib//librtemscpu.a(dummy.o):(.data+0x4): first defined here<br>
/home/h1/GSOC/rtems5_epics7/QtC-epics-base/lib/RTEMS-pc386-qemu/librtemsCom.a(rtems_config.o):(.data+0x8): multiple definition of `rtems_fs_init_helper'<br>
/home/travis/.rtems/i386-rtems4.10/pc686/lib//librtemscpu.a(dummy.o):(.data+0x8): first defined here<br>
/home/h1/GSOC/rtems5_epics7/QtC-epics-base/lib/RTEMS-pc386-qemu/librtemsCom.a(rtems_config.o):(.data+0xc): multiple definition of `rtems_libio_number_iops'<br>
/home/travis/.rtems/i386-rtems4.10/pc686/lib//librtemscpu.a(dummy.o):(.data+0xc): first defined here<br>
/home/h1/GSOC/rtems5_epics7/QtC-epics-base/lib/RTEMS-pc386-qemu/librtemsCom.a(rtems_config.o):(.bss+0x0): multiple definition of `rtems_telnetd_maximum_ptys'<br>
<br>
</blockquote></div></div>