Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti
Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti
Dopo alcuni anni di assenza dai cataloghi dei suoi televisori, Hisense riporta sul mercato una proposta OLED che punta tutto sul rapporto qualità prezzo. Hisense 55A85N è un televisore completo e versatile che riesce a convincere anche senza raggiungere le vette di televisori di altra fascia (e altro prezzo)
Recensione Borderlands 4, tra divertimento e problemi tecnici
Recensione Borderlands 4, tra divertimento e problemi tecnici
Gearbox Software rilancia la saga con Borderlands 4, ora disponibile su PS5, Xbox Series X|S e PC. Tra le novità spiccano nuove abilità di movimento, un pianeta inedito da esplorare e una campagna che lascia al giocatore piena libertà di approccio
TCL NXTPAPER 60 Ultra: lo smartphone che trasforma la lettura da digitale a naturale
TCL NXTPAPER 60 Ultra: lo smartphone che trasforma la lettura da digitale a naturale
NXTPAPER 60 Ultra è il primo smartphone con tecnologia NXTPAPER 4.0 per il display, un ampio IPS da 7,2 pollici. Con finitura anti-riflesso, processore MediaTek Dimensity 7400, fotocamera periscopica e modalità Max Ink per il detox digitale, NXTPAPER 60 Ultra punta a essere il riferimento tra gli smartphone pensati per il benessere degli occhi.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 12-07-2005, 11:22   #1
Gica78R
Senior Member
 
L'Avatar di Gica78R
 
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.
Gica78R è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2005, 14:58   #2
Fenomeno85
Senior Member
 
L'Avatar di Fenomeno85
 
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
Fenomeno85 è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2005, 16:21   #3
Gica78R
Senior Member
 
L'Avatar di Gica78R
 
Iscritto dal: Mar 2005
Messaggi: 1653
Quote:
Originariamente inviato da Fenomeno85
potresti utilizzare #ifdef su tutte le parti di codice che deve essere eseguite da uno piuttosto che dall'altro

~§~ Sempre E Solo Lei ~§~
Ma secondo te e' corretto fare una cosa del genere?
Codice:
#ifndef _POSIX_C_SOURCE
#define _POSIX_C_SOURCE 1
#endif
o e' sbagliato assegnare quell' 1? Cosi' facendo, compila anche su OS X, ma mi sa che non e' una gran finezza...
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
per questioni di retrocompatibilita', mentre ora la definizione di quella union va inserita nel codice dell'applicazione.
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
Gica78R è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2005, 16:51   #4
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
Originariamente inviato da Gica78R
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?
La saga degli standard. Prova a compilare definendo unicamente _GNU_SOURCE.
__________________
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
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2005, 17:12   #5
Fenomeno85
Senior Member
 
L'Avatar di Fenomeno85
 
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
~§~ 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
Fenomeno85 è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2005, 19:24   #6
Gica78R
Senior Member
 
L'Avatar di Gica78R
 
Iscritto dal: Mar 2005
Messaggi: 1653
Quote:
Originariamente inviato da ilsensine
La saga degli standard. Prova a compilare definendo unicamente _GNU_SOURCE.
Su Linux funziona, su Mac c' e' sempre il problema che la union semun viene dichiarata due volte... C'e' proprio bisogno di usare _POSIX_C_SOURCE.
Magari inserisco la definizione della union in un blocco condizionale su _POSIX_C_SOURCE, tipo:
Codice:
#ifdef _POSIX_C_SOURCE
union semun
{
  ......
  ......
}
#endif
Cosi' funziona su entrambi i sistemi, ma non so se e' una soluzione "regolare"

@Fenomeno85
Se ci fosse modo (e credo ci sia, ma io non lo conosco ) di sapere su quale sistema si sta compilando, potrei fare come hai detto tu. O funziona semplicemente usando MAC?
__________________
gica78r@ncc-1701:~$ tar -c
tar: Codardamente mi rifiuto di creare un archivio vuoto
Gica78R è offline   Rispondi citando il messaggio o parte di esso
Old 13-07-2005, 07:08   #7
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
Originariamente inviato da Gica78R
Su Linux funziona, su Mac c' e' sempre il problema che la union semun viene dichiarata due volte... C'e' proprio bisogno di usare _POSIX_C_SOURCE.
_GNU_SOURCE sotto linux abilita automaticamente tutta una serie di standard. E' stata fatta proprio per non impazzire con le varie definizioni. Evidentemente sotto Mac non si ha una fortuna analoga.
Quote:
Se ci fosse modo (e credo ci sia, ma io non lo conosco ) di sapere su quale sistema si sta compilando
#ifdef __linux__
...
#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
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 14-07-2005, 10:09   #8
Gica78R
Senior Member
 
L'Avatar di Gica78R
 
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
e funziona. Poi ho provato a ricompilare omettendo anche _GNU_SOURCE e, stranamente, non mi da' piu' il warning relativo a _SVID_SOURCE e _XOPEN_SOURCE Ora questo avviso compare solo (giustamente) compilando con l'opzione -ansi
Mah!

@ilsensine: ma quando dici definire _GNU_SOURCE intendi
Codice:
#define _GNU_SOURCE 1
o soltanto
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
Gica78R è offline   Rispondi citando il messaggio o parte di esso
Old 14-07-2005, 10:40   #9
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
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
ilsensine è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti Hisense A85N: il ritorno all’OLED è convi...
Recensione Borderlands 4, tra divertimento e problemi tecnici Recensione Borderlands 4, tra divertimento e pro...
TCL NXTPAPER 60 Ultra: lo smartphone che trasforma la lettura da digitale a naturale TCL NXTPAPER 60 Ultra: lo smartphone che trasfor...
Un fulmine sulla scrivania, Corsair Sabre v2 Pro ridefinisce la velocità nel gaming Un fulmine sulla scrivania, Corsair Sabre v2 Pro...
Nokia Innovation Day 2025: l’Europa ha bisogno di campioni nelle telecomunicazioni Nokia Innovation Day 2025: l’Europa ha bisogno d...
The Social Reckoning: il seguito di The ...
iPhone 16 si trova ora su Amazon a soli ...
Amazon fa a pezzi i prezzi dei monitor g...
Componenti hardware e periferiche PC a p...
Pianeta in crisi: 7 su 9 limiti vitali g...
Galaxy S25 FE con taglio di prezzo di 10...
4 robot aspirapolvere e 3 scope elettric...
Nuovissimi Xiaomi 15T e 15T Pro con tagl...
Le agenzie federali americane potranno u...
Smartphone pieghevoli sempre più ...
LG svela le Easy TV, una nuova gamma di ...
L'equipaggio della missione Shenzhou-20 ...
Possibili detriti spaziali del razzo cin...
Amazon distrugge i prezzi: TV OLED LG, i...
Trump studia dazi fino al 100% per sping...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 23:08.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v