|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Mar 2005
Messaggi: 1653
|
[C] Portabilita' Linux - Mac OS X (BSD?)
Ciao a tutti!
Sto realizzando un'applicazione che necessita di fare uso dei semafori per la sincronizzazione dei processi, quindi nei miei sorgenti includo gli header sys/ipc.h e sys/sem.h. Per operare sui semafori si usa la funzione semctl(), che tra i suoi argomenti prevede una variabile di tipo union semun. Nelle glibc, in sem.h, tale union non e' definita esplicitamente, quindi va ridefinita nei sorgenti dell'applicazione, contrariamente a quanto accade nel sem.h che trovo nelle librerie di Mac OS X (libc?). Compilando sotto Linux, ricevo un warning che mi dice che se utilizzo sys/ipc.h devo definire anche la macro _SVID_SOURCE oppure _XOPEN_SOURCE. Compilando in ambiente Mac, ottengo un errore sulla ridefinizione della union semun (poiche' e' gia' definita in sem.h), a meno di non definire la macro _POSIX_C_SOURCE. Cosa devo fare per fare in modo che la compilazione vada a buon fine in entrambi gli ambienti? Devo usare le direttive condizionali al preprocessore? E tali direttive le devo mettere solo in quei files che includono ipc.h e sem.h? Oppure la cosa si puo' risolvere utilizzando opportune opzioni del compilatore (nel qual caso mi si complicherebbe il Makefile)? Spero di essermi spiegato chiaramente... ![]() Grazie, Gica Correzione: prima avevo scritto 'semop()' al posto di 'semctl()'; la funzione giusta e' quest'ultima... ![]()
__________________
gica78r@ncc-1701:~$ tar -c tar: Codardamente mi rifiuto di creare un archivio vuoto ![]() Ultima modifica di Gica78R : 12-07-2005 alle 14:28. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Jun 2002
Città:
Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8895
|
potresti utilizzare #ifdef su tutte le parti di codice che deve essere eseguite da uno piuttosto che dall'altro
~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio. Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso |
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Mar 2005
Messaggi: 1653
|
Quote:
Codice:
#ifndef _POSIX_C_SOURCE #define _POSIX_C_SOURCE 1 #endif Nell'header sys/sem.h che trovo nelle lib di OS X si usa la condizione Codice:
#ifndef _POSIX_C_SOURCE ....... [definizione della union semun] ....... #endif Nello stesso header che c'e' nelle glibc (in realta' in bits/sem.h, incluso da sys/sem.h), invece, tale definizione e' commentata, con la raccomandazione di definire la union nel proprio sorgente...
__________________
gica78r@ncc-1701:~$ tar -c tar: Codardamente mi rifiuto di creare un archivio vuoto ![]() |
|
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Jun 2002
Città:
Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8895
|
prova con
Codice:
#ifdef MAC //codice MAC #endif #ifndef MAC //codice LINUX #endif
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio. Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso |
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Mar 2005
Messaggi: 1653
|
Quote:
Magari inserisco la definizione della union in un blocco condizionale su _POSIX_C_SOURCE, tipo: Codice:
#ifdef _POSIX_C_SOURCE union semun { ...... ...... } #endif ![]() @Fenomeno85 Se ci fosse modo (e credo ci sia, ma io non lo conosco ![]()
__________________
gica78r@ncc-1701:~$ tar -c tar: Codardamente mi rifiuto di creare un archivio vuoto ![]() |
|
![]() |
![]() |
![]() |
#7 | ||
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
Quote:
... #else ... #endif
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
||
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Mar 2005
Messaggi: 1653
|
Alla fine, per il problema della definizione della union semun ho risolto cosi'
Codice:
#ifdef _SEM_SEMUN_UNDEFINED [definizione della union] #endif ![]() ![]() Mah! @ilsensine: ma quando dici definire _GNU_SOURCE intendi Codice:
#define _GNU_SOURCE 1 Codice:
#define _GNU_SOURCE Voglio dire, ha senso fare una #define senza un numerale? (la parte delle direttive al preprocessore e' ancora poco chiara per me ![]()
__________________
gica78r@ncc-1701:~$ tar -c tar: Codardamente mi rifiuto di creare un archivio vuoto ![]() |
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Basta la definizione semplice. Io normalmente metto -D_GNU_SOURCE tra i CPPFLAGS.
Alcune verisoni di gcc lo definiscono automaticamente.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 22:49.