Torna indietro   Hardware Upgrade Forum > Software > Programmazione

HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione
HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione
HONOR ha finalmente lanciato il suo nuovo flagship: Magic 8 Pro. Lo abbiamo provato a fondo in queste settimane e ve lo raccontiamo nella nostra recensione completa. HONOR rimane fedele alle linee della versione precedente, aggiungendo però un nuovo tasto dedicato all'AI. Ma è al suo interno che c'è la vera rivoluzione grazie al nuovo Snapdragon 8 Elite Gen 5 e alla nuova MagicOS 10
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata
Le webcam Insta360 Link 2 Pro e Link 2C Pro sono una proposta di fascia alta per chi cerca qualità 4K e tracciamento automatico del soggetto senza ricorrere a configurazioni complesse. Entrambi i modelli condividono sensore, ottiche e funzionalità audio avanzate, differenziandosi per il sistema di tracciamento: gimbal a due assi sul modello Link 2 Pro, soluzione digitale sul 2C Pro
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70 porta il concetto di smartphone ultrasottile su un terreno più concreto e accessibile: abbina uno spessore sotto i 6 mm a una batteria di capacità relativamente elevata, un display pOLED da 6,7 pollici e un comparto fotografico triplo da 50 MP. Non punta ai record di potenza, ma si configura come alternativa più pragmatica rispetto ai modelli sottili più costosi di Samsung e Apple
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 12-07-2005, 12: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 15:28.
Gica78R è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2005, 15: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: 8897
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, 17: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, 17: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, 18: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: 8897
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, 20: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, 08: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, 11: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, 11: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


HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione HONOR Magic 8 Pro: ecco il primo TOP del 2026! L...
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata Insta360 Link 2 Pro e 2C Pro: le webcam 4K che t...
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza Motorola edge 70: lo smartphone ultrasottile che...
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026 Display, mini PC, periferiche e networking: le n...
Le novità ASUS per il 2026 nel settore dei PC desktop Le novità ASUS per il 2026 nel settore de...
Samsung conferma l'arrivo di tre variant...
Sottile, veloce e con un'ottima autonomi...
Il top di gamma compatto di OnePlus &egr...
Modificare l'indirizzo Gmail è finalment...
Perché le GeForce RTX con pi&ugra...
Più tempo online non equivale a più disa...
Amazon Weekend: iPhone 17 Pro, robot asp...
TV OLED 65'' top di gamma al 50%: 144Hz,...
Londra si prepara al terremoto 'intellig...
Scope elettriche in offerta su Amazon: f...
iPhone 17 Pro a un nuovo minimo storico ...
DJI Mini 4 Pro Fly More Combo a 859€ su ...
Roborock in offerta su Amazon: QV 35A e ...
Crisi della RAM: Intel rassicura sul mer...
Dreame taglia i prezzi su Amazon: L40 Ul...
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: 07:28.


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