dlopen failed: file not found
Saeed Ehteshamifar
salpha.2004 at gmail.com
Mon Aug 1 10:49:05 UTC 2016
On Thu, Jul 28, 2016 at 9:18 AM, Saeed Ehteshamifar <salpha.2004 at gmail.com>
wrote:
> Hi,
>
> On Thu, Jul 28, 2016 at 4:22 AM, Chris Johns <chrisj at rtems.org> wrote:
>
>> On 28/07/2016 08:05, Saeed Ehteshamifar wrote:
>>
>>> Hello,
>>>
>>> I followed the instructions Chris posted on using WAF to make a TAR
>>> object file and linked it to my program. But when I run it, I get "file
>>> not found" error. I'm using SPARC SIS.
>>>
>>> Here is my waf script:
>>> import rtems_waf.rtems as rtems
>>>
>>> def init(ctx):
>>> rtems.init(ctx)
>>>
>>> def options(opt):
>>> rtems.options(opt)
>>>
>>> def configure(conf):
>>> rtems.configure(conf)
>>>
>>> def build(bld):
>>> rtems.build(bld)
>>>
>>> rtems.root_filesystem(bld, 'dl',
>>> ['init.c',
>>> 'hello.c'],
>>> 'dl.tar', 'dl-tar.o')
>>>
>>>
>> How do you build the tar file into the executable?
>>
>
> Via linking dl-tar.o to my application. This is the Makefile:
>
> PGM=${ARCH}/dl.exe
>
> # optional managers required
> MANAGERS=all
>
> # C source names
> CSRCS = init.c hello.c
> COBJS = $(CSRCS:%.c=${ARCH}/%.o)
> COBJS += build/sparc-rtems4.12-sis/dl-tar.o
>
> include $(RTEMS_MAKEFILE_PATH)/Makefile.inc
> include $(RTEMS_CUSTOM)
> include $(PROJECT_ROOT)/make/leaf.cfg
>
> OBJS= $(COBJS) $(CXXOBJS) $(ASOBJS)
>
> all: ${ARCH} $(PGM)
>
> $(PGM): $(OBJS)
> $(make-exe)
>
>
>
>>
>>
>>>
>>> And here is how I untar the object in my Init task and load the dynamic
>>> object, which should print "Hello":
>>> ...
>>> extern int _binary_dl_tar_start;
>>> extern int _binary_dl_tar_size;
>>>
>>> rtems_task Init(
>>> rtems_task_argument ignored
>>> )
>>> {
>>> int (*hello)();
>>>
>>> int te = Untar_FromMemory((void *)(&_binary_dl_tar_start),
>>> (size_t)(_binary_dl_tar_size));
>>> /* error checking. omitted here. */
>>>
>>
>> I suggest you print the error code here.
>>
>
> I omitted untar error handling for simplicity. In fact it looks like:
>
> if (te != 0)
> {
> printf("untar failed: %d\n", te);
> exit (1);
> }
>
>
>>
>> Chris
>>
>>
>>> void* handle = dlopen ("/hello.o", RTLD_NOW | RTLD_GLOBAL);
>>> if (!handle)
>>> {
>>> printf("dlopen failed: %s\n", dlerror());
>>> exit(1);
>>> }
>>> ...
>>>
>>> What am I doing wrong? Using /objdump/ and /nm/ I didn't find ANY
>>> occurrence of /hello /in the final executable file.
>>>
>>> Best Regards,
>>> Saeed
>>>
>>>
>>> _______________________________________________
>>> users mailing list
>>> users at rtems.org
>>> http://lists.rtems.org/mailman/listinfo/users
>>>
>>>
> What could be the problem that *hello* object is not found (dlopen
> failed: file not found)?
>
Any clues, any help?
>
> Best Regards,
> Saeed
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/users/attachments/20160801/63c1a55b/attachment.html>
More information about the users
mailing list