All of lore.kernel.org
 help / color / mirror / Atom feed
* [Xenomai-help] how to build a Xenomai posix library ?
@ 2008-10-14 13:21 roderik.wildenburg
  2008-10-14 13:35 ` Gilles Chanteperdrix
  0 siblings, 1 reply; 9+ messages in thread
From: roderik.wildenburg @ 2008-10-14 13:21 UTC (permalink / raw)
  To: xenomai

I´ve built a library which includes Xenomai posix functions.
If a "customer" wants to use this library (links the library to his project) he unfortunately has to define all the wrappers for the posix functions I used within the library.
Is this a general limitation when using posix in a library or do I simply not know how to build a proper Xenomai-library. Is there a posibility to avoid the wrapers so the user simply has to link the library and needn´t to define anyhing else (just -lxenolib) ?

Thank you in advance for your help
Roderik

Achtung: Neue E-Mail-Adresse! Attention: New e-mail-address! roderik.wildenburg@domain.hid
--------------------------------------------------------
manroland AG
Vorsitzender des Aufsichtsrates: Hanno C. Fiedler
Vorstand: Gerd Finkbeiner (Vorsitzender), Dr. Ingo Koch, Dr. Markus Rall, Paul Steidle   
Sitz der Gesellschaft: Offenbach am Main, Registergericht: Amtsgericht Offenbach HRB-Nr. 42592
USt-Ident-Nr. DE 250200933


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Xenomai-help] how to build a Xenomai posix library ?
  2008-10-14 13:21 [Xenomai-help] how to build a Xenomai posix library ? roderik.wildenburg
@ 2008-10-14 13:35 ` Gilles Chanteperdrix
  2008-10-16  9:36   ` roderik.wildenburg
  0 siblings, 1 reply; 9+ messages in thread
From: Gilles Chanteperdrix @ 2008-10-14 13:35 UTC (permalink / raw)
  To: roderik.wildenburg; +Cc: xenomai

roderik.wildenburg@domain.hid wrote:
> I´ve built a library which includes Xenomai posix functions.
> If a "customer" wants to use this library (links the library to his
> project) he unfortunately has to define all the wrappers for the
> posix functions I used within the library. Is this a general
> limitation when using posix in a library or do I simply not know how
> to build a proper Xenomai-library. Is there a posibility to avoid the
> wrapers so the user simply has to link the library and needn´t to
> define anyhing else (just -lxenolib) ?
> 
> Thank you in advance for your help Roderik

It is a limitation that comes from using ld --wrap option.
Unfortunately, we really have no other mean to achieve compliance with
the posix interface, especially since Xenomai posix library needs
symbols from the libc libpthread library.

In a near future, it will be possible to directly call xenomai posix
library services without using the --wrap trick. Only, you will have to
prefix them or postfix them. Actually, you can already do that by
calling directly __wrap_service instead of service.

Another way to solve your issue is to ship your library with a shell
script much like xeno-config which generates the correct flags. You can
probably do what we have not done for xenomai: use the pkg-config
package. This approach is used for many libraries nowadays.

-- 
                                                 Gilles.


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Xenomai-help] how to build a Xenomai posix library ?
  2008-10-14 13:35 ` Gilles Chanteperdrix
@ 2008-10-16  9:36   ` roderik.wildenburg
  2008-10-16  9:48     ` Gilles Chanteperdrix
  0 siblings, 1 reply; 9+ messages in thread
From: roderik.wildenburg @ 2008-10-16  9:36 UTC (permalink / raw)
  To: xenomai

> > I´ve built a library which includes Xenomai posix functions.
> > If a "customer" wants to use this library (links the library to his
> > project) he unfortunately has to define all the wrappers for the
> > posix functions I used within the library. Is this a general
> > limitation when using posix in a library or do I simply not know how
> > to build a proper Xenomai-library. Is there a posibility to 
> avoid the
> > wrapers so the user simply has to link the library and needn´t to
> > define anyhing else (just -lxenolib) ?
> > 
> > Thank you in advance for your help Roderik
> 
> It is a limitation that comes from using ld --wrap option.
> Unfortunately, we really have no other mean to achieve compliance with
> the posix interface, especially since Xenomai posix library needs
> symbols from the libc libpthread library.
> 
> In a near future, it will be possible to directly call xenomai posix
> library services without using the --wrap trick. Only, you 
> will have to
> prefix them or postfix them. Actually, you can already do that by
> calling directly __wrap_service instead of service.

I did so and called, within the library, every posix_rt-function with the prefix __wrap_ :
e.g. __wrap_shm_open
then I compiled my application, which does not use any Xenomai-function, and linked it with pthread_rt an rt (-lpthread_rt -lrt) and my new Xenomai-library (linking without any wrapping defined). Linking and compiling did not produce any error.
But, when I call a function in my library, which in turn calls __wrap_shm_open, then shm_open fails.
When I link my application with wrapping (as provided by the XENO_CONFIG-script) then everything is fine. Do you have an explanation for this behavior or even better a solution ?

> 
> Another way to solve your issue is to ship your library with a shell
> script much like xeno-config which generates the correct 
> flags. You can
> probably do what we have not done for xenomai: use the pkg-config
> package. This approach is used for many libraries nowadays.
>

Achtung: Neue E-Mail-Adresse! Attention: New e-mail-address! roderik.wildenburg@domain.hid
--------------------------------------------------------
manroland AG
Vorsitzender des Aufsichtsrates: Hanno C. Fiedler
Vorstand: Gerd Finkbeiner (Vorsitzender), Dr. Ingo Koch, Dr. Markus Rall, Paul Steidle   
Sitz der Gesellschaft: Offenbach am Main, Registergericht: Amtsgericht Offenbach HRB-Nr. 42592
USt-Ident-Nr. DE 250200933


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Xenomai-help] how to build a Xenomai posix library ?
  2008-10-16  9:36   ` roderik.wildenburg
@ 2008-10-16  9:48     ` Gilles Chanteperdrix
  2008-10-16 10:14       ` roderik.wildenburg
  0 siblings, 1 reply; 9+ messages in thread
From: Gilles Chanteperdrix @ 2008-10-16  9:48 UTC (permalink / raw)
  To: roderik.wildenburg; +Cc: xenomai

roderik.wildenburg@domain.hid wrote:
> I did so and called, within the library, every posix_rt-function with
> the prefix __wrap_ : e.g. __wrap_shm_open then I compiled my
> application, which does not use any Xenomai-function, and linked it
> with pthread_rt an rt (-lpthread_rt -lrt) and my new Xenomai-library
> (linking without any wrapping defined). Linking and compiling did not
> produce any error. But, when I call a function in my library, which
> in turn calls __wrap_shm_open, then shm_open fails. When I link my
> application with wrapping (as provided by the XENO_CONFIG-script)
> then everything is fine. Do you have an explanation for this behavior
> or even better a solution ?

__wrap_shm_open only works if you have the CONFIG_XENO_OPT_POSIX_SHM
option enabled. Is it enabled? Note that xenomai posix skin shm support
is mainly useful for sharing memory between kernel and user-space. If it
is enabled, then please tell us what is the value of errno when
__wrap_shm_open fails.

-- 
                                                 Gilles.


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Xenomai-help] how to build a Xenomai posix library ?
  2008-10-16  9:48     ` Gilles Chanteperdrix
@ 2008-10-16 10:14       ` roderik.wildenburg
  2008-10-16 12:14         ` Gilles Chanteperdrix
  0 siblings, 1 reply; 9+ messages in thread
From: roderik.wildenburg @ 2008-10-16 10:14 UTC (permalink / raw)
  To: xenomai

> -----Ursprüngliche Nachricht-----
> Von: Gilles Chanteperdrix [mailto:gilles.chanteperdrix@xenomai.org
> Gesendet: Donnerstag, 16. Oktober 2008 11:48
> An: Wildenburg, Roderik RAEK3 MRA
> Cc: xenomai@xenomai.org
> Betreff: Re: [Xenomai-help] how to build a Xenomai posix library ?
> 
> roderik.wildenburg@domain.hid wrote:
> > I did so and called, within the library, every 
> posix_rt-function with
> > the prefix __wrap_ : e.g. __wrap_shm_open then I compiled my
> > application, which does not use any Xenomai-function, and linked it
> > with pthread_rt an rt (-lpthread_rt -lrt) and my new Xenomai-library
> > (linking without any wrapping defined). Linking and 
> compiling did not
> > produce any error. But, when I call a function in my library, which
> > in turn calls __wrap_shm_open, then shm_open fails. When I link my
> > application with wrapping (as provided by the XENO_CONFIG-script)
> > then everything is fine. Do you have an explanation for 
> this behavior
> > or even better a solution ?
> 
> __wrap_shm_open only works if you have the CONFIG_XENO_OPT_POSIX_SHM
> option enabled. Is it enabled?

yes it is : 
CONFIG_XENO_OPT_POSIX_SHM=y
otherwise, I think, my application linked with wrappings defined wouldn´t work ? But it does.

> Note that xenomai posix skin shm support
> is mainly useful for sharing memory between kernel and 
> user-space. 
O.k., I just want to share SHM between applications. What SHM construct should I use instead ?

> If it is enabled, then please tell us what is the value of errno when
> __wrap_shm_open fails.
> 

shm_open fails. errno=2
shm_open fails : : No such file or directory

I don´t know what this should mean ??
I call shm_open in the following way :
#define LOGSHMNAME   "/var/logshm"
oflags=O_RDWR;
*shmfd = shm_open(LOGSHMNAME, oflags, 0);

Again, linking my application with all the wrappers defined builds a well working application. So, for me, the SHM-constructs are o.K., but linking builds different applications, depending on the wrappers.

Here is the console output of linking without wrappers:
ppc-linux-gcc -I/opt/eldk/xenomai/include -I/opt/eldk/xenomai/include/posix -D_GNU_SOURCE -D_REENTRANT -D__XENO__ -g -Wall  pecomlog.c -c -o pecomlog.o
ppc-linux-gcc   -L/opt/eldk/xenomai/lib -lpthread_rt -lrt -Wall -o pecomlog  pecomlog.o loglib.a

where loglib.a is my new Xenomay library and pecomlog is my application.

many thanks for your help !

Achtung: Neue E-Mail-Adresse! Attention: New e-mail-address! roderik.wildenburg@domain.hid
--------------------------------------------------------
manroland AG
Vorsitzender des Aufsichtsrates: Hanno C. Fiedler
Vorstand: Gerd Finkbeiner (Vorsitzender), Dr. Ingo Koch, Dr. Markus Rall, Paul Steidle   
Sitz der Gesellschaft: Offenbach am Main, Registergericht: Amtsgericht Offenbach HRB-Nr. 42592
USt-Ident-Nr. DE 250200933


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Xenomai-help] how to build a Xenomai posix library ?
  2008-10-16 10:14       ` roderik.wildenburg
@ 2008-10-16 12:14         ` Gilles Chanteperdrix
  2008-10-16 12:34           ` roderik.wildenburg
  0 siblings, 1 reply; 9+ messages in thread
From: Gilles Chanteperdrix @ 2008-10-16 12:14 UTC (permalink / raw)
  To: roderik.wildenburg; +Cc: xenomai

roderik.wildenburg@domain.hid wrote:
>> -----Ursprüngliche Nachricht-----
>> Von: Gilles Chanteperdrix [mailto:gilles.chanteperdrix@xenomai.org] 
>> Gesendet: Donnerstag, 16. Oktober 2008 11:48
>> An: Wildenburg, Roderik RAEK3 MRA
>> Cc: xenomai@xenomai.org
>> Betreff: Re: [Xenomai-help] how to build a Xenomai posix library ?
>>
>> roderik.wildenburg@domain.hid wrote:
>>> I did so and called, within the library, every 
>> posix_rt-function with
>>> the prefix __wrap_ : e.g. __wrap_shm_open then I compiled my
>>> application, which does not use any Xenomai-function, and linked it
>>> with pthread_rt an rt (-lpthread_rt -lrt) and my new Xenomai-library
>>> (linking without any wrapping defined). Linking and 
>> compiling did not
>>> produce any error. But, when I call a function in my library, which
>>> in turn calls __wrap_shm_open, then shm_open fails. When I link my
>>> application with wrapping (as provided by the XENO_CONFIG-script)
>>> then everything is fine. Do you have an explanation for 
>> this behavior
>>> or even better a solution ?
>> __wrap_shm_open only works if you have the CONFIG_XENO_OPT_POSIX_SHM
>> option enabled. Is it enabled?
> 
> yes it is : 
> CONFIG_XENO_OPT_POSIX_SHM=y
> otherwise, I think, my application linked with wrappings defined wouldn´t work ? But it does.
> 
>> Note that xenomai posix skin shm support
>> is mainly useful for sharing memory between kernel and 
>> user-space. 
> O.k., I just want to share SHM between applications. What SHM construct should I use instead ?
> 
>> If it is enabled, then please tell us what is the value of errno when
>> __wrap_shm_open fails.
>>
> 
> shm_open fails. errno=2
> shm_open fails : : No such file or directory
> 
> I don´t know what this should mean ??

Well, it means that the shared memory does not exist.

> I call shm_open in the following way :
> #define LOGSHMNAME   "/var/logshm"
> oflags=O_RDWR;
> *shmfd = shm_open(LOGSHMNAME, oflags, 0);

a shm name should contain one slash at the beginning and no other slash,
for best portability.
If you want to create a shared memory, you should pass the O_CREAT flag.

This is all documented here:

http://www.xenomai.org/documentation/trunk/html/api/group__posix__shm.html#gf765a0fa9152fbf874436c966f3af7ba

-- 
                                                 Gilles.


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Xenomai-help] how to build a Xenomai posix library ?
  2008-10-16 12:14         ` Gilles Chanteperdrix
@ 2008-10-16 12:34           ` roderik.wildenburg
  2008-10-16 12:41             ` Gilles Chanteperdrix
  0 siblings, 1 reply; 9+ messages in thread
From: roderik.wildenburg @ 2008-10-16 12:34 UTC (permalink / raw)
  To: xenomai

> >> roderik.wildenburg@domain.hid wrote:
> >>> I did so and called, within the library, every 
> >> posix_rt-function with
> >>> the prefix __wrap_ : e.g. __wrap_shm_open then I compiled my
> >>> application, which does not use any Xenomai-function, and 
> linked it
> >>> with pthread_rt an rt (-lpthread_rt -lrt) and my new 
> Xenomai-library
> >>> (linking without any wrapping defined). Linking and 
> >> compiling did not
> >>> produce any error. But, when I call a function in my 
> library, which
> >>> in turn calls __wrap_shm_open, then shm_open fails. When I link my
> >>> application with wrapping (as provided by the XENO_CONFIG-script)
> >>> then everything is fine. Do you have an explanation for 
> >> this behavior
> >>> or even better a solution ?
> >> __wrap_shm_open only works if you have the 
> CONFIG_XENO_OPT_POSIX_SHM
> >> option enabled. Is it enabled?
> > 
> > yes it is : 
> > CONFIG_XENO_OPT_POSIX_SHM=y
> > otherwise, I think, my application linked with wrappings 
> defined wouldn´t work ? But it does.
> > 
> >> Note that xenomai posix skin shm support
> >> is mainly useful for sharing memory between kernel and 
> >> user-space. 
> > O.k., I just want to share SHM between applications. What 
> SHM construct should I use instead ?
> > 
> >> If it is enabled, then please tell us what is the value of 
> errno when
> >> __wrap_shm_open fails.
> >>
> > 
> > shm_open fails. errno=2
> > shm_open fails : : No such file or directory
> > 
> > I don´t know what this should mean ??
> 
> Well, it means that the shared memory does not exist.

I am quite shure that it exist. It is created by an other process.
Is there a /proc-entry or something else which lists existing shared memories ?

> 
> > I call shm_open in the following way :
> > #define LOGSHMNAME   "/var/logshm"
> > oflags=O_RDWR;
> > *shmfd = shm_open(LOGSHMNAME, oflags, 0);
> 
> a shm name should contain one slash at the beginning and no 
> other slash,
> for best portability.

As I expected, reducing the number of slashes to one does not change the behavior.

> If you want to create a shared memory, you should pass the 
> O_CREAT flag.

As mentioned above, an other process creates the shared memory.
What I still don´t understand is, what influence the wrapper defines have on linking.
With wrappers : aplication works fine. Without wrappers : application does not work !?

Roderik

Achtung: Neue E-Mail-Adresse! Attention: New e-mail-address! roderik.wildenburg@domain.hid
--------------------------------------------------------
manroland AG
Vorsitzender des Aufsichtsrates: Hanno C. Fiedler
Vorstand: Gerd Finkbeiner (Vorsitzender), Dr. Ingo Koch, Dr. Markus Rall, Paul Steidle   
Sitz der Gesellschaft: Offenbach am Main, Registergericht: Amtsgericht Offenbach HRB-Nr. 42592
USt-Ident-Nr. DE 250200933


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Xenomai-help] how to build a Xenomai posix library ?
  2008-10-16 12:34           ` roderik.wildenburg
@ 2008-10-16 12:41             ` Gilles Chanteperdrix
  2008-10-17  9:58               ` [Xenomai-help] how to build a Xenomai posix library ? solved roderik.wildenburg
  0 siblings, 1 reply; 9+ messages in thread
From: Gilles Chanteperdrix @ 2008-10-16 12:41 UTC (permalink / raw)
  To: roderik.wildenburg; +Cc: xenomai

roderik.wildenburg@domain.hid wrote:
>>>> roderik.wildenburg@domain.hid wrote:
>>> *shmfd = shm_open(LOGSHMNAME, oflags, 0);
>> a shm name should contain one slash at the beginning and no 
>> other slash,
>> for best portability.
> 
> As I expected, reducing the number of slashes to one does not change the behavior.

I never said it would.

> 
>> If you want to create a shared memory, you should pass the 
>> O_CREAT flag.
> 
> As mentioned above, an other process creates the shared memory.

Is it also linked with xenomai posix skin?

> What I still don´t understand is, what influence the wrapper defines have on linking.
> With wrappers : aplication works fine. Without wrappers : application does not work !?

I would say that with wrappers, you are in fact using the vanilla linux
shared memory, by passing __wrap_shm_open, you really use xenomai posix
skin services.

If that is the case, when using the wrapped version, you should see the
shared memory appear under /dev/shm.

-- 
                                                 Gilles.


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Xenomai-help] how to build a Xenomai posix library ? solved
  2008-10-16 12:41             ` Gilles Chanteperdrix
@ 2008-10-17  9:58               ` roderik.wildenburg
  0 siblings, 0 replies; 9+ messages in thread
From: roderik.wildenburg @ 2008-10-17  9:58 UTC (permalink / raw)
  To: xenomai

Just for information :
in my new xenomai library I wraped shm_open (->__wrap_shm_open) shm_inlink (->__wrap_unlink) and so on (all symbols I´ve got a "unresolved" for). Unfortunatelly I did not get a "unresolved" for ftruncate and mmap, so I didn´t wraped them. Wrapping these symbols solved my problem (library is linkable without wrapers defined and the application linked with my new library works fine).
Thank you Gilles for your support !
Roderik


> -----Ursprüngliche Nachricht-----
> Von: Gilles Chanteperdrix [mailto:gilles.chanteperdrix@xenomai.org
> Gesendet: Donnerstag, 16. Oktober 2008 14:42
> An: Wildenburg, Roderik RAEK3 MRA
> Cc: xenomai@xenomai.org
> Betreff: Re: [Xenomai-help] how to build a Xenomai posix library ?
> 
> roderik.wildenburg@domain.hid wrote:
> >>>> roderik.wildenburg@domain.hid wrote:
> >>> *shmfd = shm_open(LOGSHMNAME, oflags, 0);
> >> a shm name should contain one slash at the beginning and no 
> >> other slash,
> >> for best portability.
> > 
> > As I expected, reducing the number of slashes to one does 
> not change the behavior.
> 
> I never said it would.
> 
> > 
> >> If you want to create a shared memory, you should pass the 
> >> O_CREAT flag.
> > 
> > As mentioned above, an other process creates the shared memory.
> 
> Is it also linked with xenomai posix skin?
> 
> > What I still don´t understand is, what influence the 
> wrapper defines have on linking.
> > With wrappers : aplication works fine. Without wrappers : 
> application does not work !?
> 
> I would say that with wrappers, you are in fact using the 
> vanilla linux
> shared memory, by passing __wrap_shm_open, you really use 
> xenomai posix
> skin services.
> 
> If that is the case, when using the wrapped version, you 
> should see the
> shared memory appear under /dev/shm.
> 
> -- 
>                                                  Gilles.
>

Achtung: Neue E-Mail-Adresse! Attention: New e-mail-address! roderik.wildenburg@domain.hid
--------------------------------------------------------
manroland AG
Vorsitzender des Aufsichtsrates: Hanno C. Fiedler
Vorstand: Gerd Finkbeiner (Vorsitzender), Dr. Ingo Koch, Dr. Markus Rall, Paul Steidle   
Sitz der Gesellschaft: Offenbach am Main, Registergericht: Amtsgericht Offenbach HRB-Nr. 42592
USt-Ident-Nr. DE 250200933


^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2008-10-17  9:58 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-10-14 13:21 [Xenomai-help] how to build a Xenomai posix library ? roderik.wildenburg
2008-10-14 13:35 ` Gilles Chanteperdrix
2008-10-16  9:36   ` roderik.wildenburg
2008-10-16  9:48     ` Gilles Chanteperdrix
2008-10-16 10:14       ` roderik.wildenburg
2008-10-16 12:14         ` Gilles Chanteperdrix
2008-10-16 12:34           ` roderik.wildenburg
2008-10-16 12:41             ` Gilles Chanteperdrix
2008-10-17  9:58               ` [Xenomai-help] how to build a Xenomai posix library ? solved roderik.wildenburg

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.