<div dir="ltr">Hi,<br><div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Jul 28, 2016 at 4:22 AM, Chris Johns <span dir="ltr"><<a target="_blank" href="mailto:chrisj@rtems.org">chrisj@rtems.org</a>></span> wrote:<br><blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex" class="gmail_quote"><span class="gmail-">On 28/07/2016 08:05, Saeed Ehteshamifar wrote:<br>
<blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex" class="gmail_quote">
Hello,<br>
<br>
I followed the instructions Chris posted on using WAF to make a TAR<br>
object file and linked it to my program. But when I run it, I get "file<br>
not found" error. I'm using SPARC SIS.<br>
<br>
Here is my waf script:<br>
import rtems_waf.rtems as rtems<br>
<br>
def init(ctx):<br>
     rtems.init(ctx)<br>
<br>
def options(opt):<br>
     rtems.options(opt)<br>
<br>
def configure(conf):<br>
     rtems.configure(conf)<br>
<br>
def build(bld):<br>
     rtems.build(bld)<br>
<br>
     rtems.root_filesystem(bld, 'dl',<br>
         ['init.c',<br>
         'hello.c'],<br>
         'dl.tar', 'dl-tar.o')<br>
<br>
</blockquote>
<br></span>
How do you build the tar file into the executable?<span class="gmail-"><br></span></blockquote><div><br>Via linking dl-tar.o to my application. This is the Makefile:<br><br>PGM=${ARCH}/dl.exe<br><br># optional managers required<br>MANAGERS=all<br><br># C source names<br>CSRCS = init.c hello.c<br>COBJS = $(CSRCS:%.c=${ARCH}/%.o)<br>COBJS += build/sparc-rtems4.12-sis/dl-tar.o<br><br>include $(RTEMS_MAKEFILE_PATH)/Makefile.inc<br>include $(RTEMS_CUSTOM)<br>include $(PROJECT_ROOT)/make/leaf.cfg<br><br>OBJS= $(COBJS) $(CXXOBJS) $(ASOBJS)<br><br>all:    ${ARCH} $(PGM)<br><br>$(PGM): $(OBJS)<br>    $(make-exe)<br><br> </div><blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex" class="gmail_quote"><span class="gmail-">
<br>
<blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex" class="gmail_quote">
<br>
<br>
And here is how I untar the object in my Init task and load the dynamic<br>
object, which should print "Hello":<br>
...<br>
extern int _binary_dl_tar_start;<br>
extern int _binary_dl_tar_size;<br>
<br>
rtems_task Init(<br>
   rtems_task_argument ignored<br>
)<br>
{<br>
   int (*hello)();<br>
<br>
   int te = Untar_FromMemory((void *)(&_binary_dl_tar_start),<br>
                         (size_t)(_binary_dl_tar_size));<br>
   /* error checking. omitted here. */<br>
</blockquote>
<br></span>
I suggest you print the error code here.<br></blockquote><div><br>I omitted untar error handling for simplicity. In fact it looks like:<br><br>  if (te != 0)<br>  {<br>    printf("untar failed: %d\n", te);<br>    exit (1);<br>  }<br> <br></div><blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex" class="gmail_quote">
<br>
Chris<br>
<br>
<blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex" class="gmail_quote"><span class="gmail-">
<br>
   void* handle = dlopen ("/hello.o", RTLD_NOW | RTLD_GLOBAL);<br>
   if (!handle)<br>
   {<br>
     printf("dlopen failed: %s\n", dlerror());<br>
     exit(1);<br>
   }<br>
...<br>
<br></span>
What am I doing wrong? Using /objdump/ and /nm/ I didn't find ANY<br>
occurrence of /hello /in the final executable file.<br>
<br>
Best Regards,<br>
Saeed<br>
<br>
<br>
_______________________________________________<br>
users mailing list<br>
<a target="_blank" href="mailto:users@rtems.org">users@rtems.org</a><br>
<a target="_blank" rel="noreferrer" href="http://lists.rtems.org/mailman/listinfo/users">http://lists.rtems.org/mailman/listinfo/users</a><br>
<br></blockquote></blockquote><div><br><div>What could be the problem that <i>hello</i> object is not found (dlopen failed: file not found)?<br><br></div><div>Best Regards,<br></div>Saeed <br></div></div><br></div></div></div>