<span style=" font-size:10pt;font-family:sans-serif">Hi,</span>
<br>
<br><span style=" font-size:10pt;font-family:sans-serif">Thank you for
the help, it did work. I've reduced it to only needing `-c` (compile, but
do not link) as the extra option.</span>
<br>
<br><span style=" font-size:10pt;font-family:sans-serif">Thanks again,</span>
<br><span style=" font-size:10pt;font-family:sans-serif">Boldizsár Palotás</span>
<br>
<br>
<br>
<br><span style=" font-size:9pt;color:#5f5f5f;font-family:sans-serif">From:
       </span><span style=" font-size:9pt;font-family:sans-serif">Chris
Johns <chrisj@rtems.org></span>
<br><span style=" font-size:9pt;color:#5f5f5f;font-family:sans-serif">To:
       </span><span style=" font-size:9pt;font-family:sans-serif">Boldizsar.Palotas@esa.int,
users@rtems.org</span>
<br><span style=" font-size:9pt;color:#5f5f5f;font-family:sans-serif">Date:
       </span><span style=" font-size:9pt;font-family:sans-serif">2018.09.18
08:18</span>
<br><span style=" font-size:9pt;color:#5f5f5f;font-family:sans-serif">Subject:
       </span><span style=" font-size:9pt;font-family:sans-serif">Re:
Link a simple program and load into RTEMS with dlopen</span>
<br>
<hr noshade>
<br>
<br>
<br><tt><span style=" font-size:10pt">On 18/09/2018 01:29, Boldizsar.Palotas@esa.int
wrote:<br>
> Hi,<br>
<br>
Hi, and welcome.<br>
<br>
> I'm using RTEMS 4.11 and the builtin POSIX API functions to dynamically
load a<br>
> program image into memory. The program image is loaded in RTEMS using
the<br>
> following code:<br>
> void* handle = dlopen(prog_name, RTLD_NOW | RTLD_GLOBAL);<br>
> if (!handle)<br>
>    printf("dlopen: %s\n", dlerror());<br>
<br>
This looks fine.<br>
<br>
> I'm using the GCC built by RTEMS Source Builder to compile the object
located at<br>
> prog_namein the in-memory filesystem.<br>
<br>
Great.<br>
<br>
> What command line should I use to properly compile a single C file
to be loaded<br>
> this way?<br>
<br>
You need to use the same command line used to compile any source to an
object<br>
file. The dynamic loader in RTEMS supports a relocatable ELF file the compiler<br>
creates with out the need for special options.<br>
<br>
> For reference, I've tried the following command line options, but
got an error:<br>
> $ /opt/rtems-4.11/bin/sparc-rtems4.11-gcc test.c -c -o test.elf -shared
-fPIC<br>
<br>
Do not use the `-shared` option, also the `-fPIC` option is not needed
for RTEMS<br>
loadable code.<br>
<br>
The RTEMS loader is not like the Linux or FreeBSD libdl loaders. The RTEMS<br>
loader will perform a standard link-edit process to locate the code in
your<br>
address space.<br>
<br>
> $ # Run in emulator, result:<br>
> $ # dlopen: global symbol not found: _GLOBAL_OFFSET_TABLE_<br>
<br>
This will be related to either the -shared or -fPIC options.<br>
<br>
> I have also tried some other combinations and also using the rtems-ld
program.<br>
<br>
The rtems-ld command is used to managing more complex sets of object files.
You<br>
can load the ELF files directly.<br>
<br>
> Any ideas?<br>
<br>
I hope this helps.<br>
<br>
Chris<br>
</span></tt>
<br>
<br><PRE>This message is intended only for the recipient(s) named above. It may contain proprietary information and/or
protected content. Any unauthorised disclosure, use, retention or dissemination is prohibited. If you have received
this e-mail in error, please notify the sender immediately. ESA applies appropriate organisational measures to protect
personal data, in case of data privacy queries, please contact the ESA Data Protection Officer (dpo@esa.int).
</PRE>