Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Lenovo IdeaPad Slim 3: un notebook Snapdragon X economico
Lenovo IdeaPad Slim 3: un notebook Snapdragon X economico
Forte della piattaforma Qualcomm Snapdragon X, il notebook Lenovo IdeaPad Slim 3 riesce a coniugare caratteristiche tecniche interessanti ad uno chassis robusto, con autonomia di funzionamento a batteria che va ben oltre la tipica giornata di lavoro. Un notebook dal costo accessibile pensato per l'utilizzo domestico o in ufficio, soprattutto con applicazioni native per architettura ARM
Recensione OnePlus Watch 3 43mm: lo smartwatch che mancava per i polsi più piccoli
Recensione OnePlus Watch 3 43mm: lo smartwatch che mancava per i polsi più piccoli
OnePlus risponde alle esigenze di chi cerca un dispositivo indossabile dalle dimensioni contenute con OnePlus Watch 3 43mm. La versione ridotta del flagship mantiene gran parte delle caratteristiche del modello maggiore, offrendo un'esperienza completa in un formato compatto. Il suo limite più grande è abbastanza ovvio: l'autonomia non è il punto di forza di questo modello, ma si raggiungono comodamente le due giornate piene con un uso normale.
BOOX Note Air4 C è uno spettacolo: il tablet E Ink con Android per lettura e scrittura
BOOX Note Air4 C è uno spettacolo: il tablet E Ink con Android per lettura e scrittura
BOOX Note Air4 C rappresenta l'ultima incarnazione della categoria dei tablet E Ink a colori di Onyx, e combina le prestazioni di un dispositivo Android con l'ottima tecnologia Kaleido 3 per il display. Con schermo da 10,3 pollici, un processore Qualcomm Snapdragon 750G e 6 GB di RAM, promette un'esperienza completa per lettura, scrittura e produttività. Il prezzo lo posiziona nel segmento premium, ma questo dispositivo è un vero spettacolo!
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


Lenovo IdeaPad Slim 3: un notebook Snapdragon X economico Lenovo IdeaPad Slim 3: un notebook Snapdragon X ...
Recensione OnePlus Watch 3 43mm: lo smartwatch che mancava per i polsi più piccoli Recensione OnePlus Watch 3 43mm: lo smartwatch c...
BOOX Note Air4 C è uno spettacolo: il tablet E Ink con Android per lettura e scrittura BOOX Note Air4 C è uno spettacolo: il tab...
Recensione Sony Xperia 1 VII: lo smartphone per gli appassionati di fotografia Recensione Sony Xperia 1 VII: lo smartphone per ...
Attenti a Poco F7: può essere il best buy del 2025. Recensione Attenti a Poco F7: può essere il best buy...
Cosa sappiamo sul decimo tentativo di la...
EHA Reader Awards 2025: i migliori prodo...
Il telescopio spaziale James Webb ha sco...
Gli astronauti cinesi in futuro utilizze...
Tesla cede alla pressione dei clienti: d...
I Vigili del Fuoco dell'Arizona ora usan...
Il fondatore di Waymo sfotte Tesla: &quo...
Robot che corrono, ballano e cadono: la ...
Perché acquistare costosi bus ele...
Google Pixel 10 Pro XL: il Tensor G5 se ...
TikTok e Instagram sotto accusa: ancora ...
Arriva la 'Superluna di Sangue' in Itali...
Xiaomi 15T e 15T Pro in arrivo in Europa...
Sicurezza dei minori, Roblox amplia i di...
POCO M7 debutta su Amazon con batteria d...
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: 22:49.


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