Τα πάντα για την C

...του ubuntu και έργων ΕΛ/ΛΑΚ (Έργα-Οδηγοί-Προτάσεις)

Συντονιστής: konnn

Re: Τα πάντα για την C

Δημοσίευσηαπό Ilias95 » 20 Απρ 2012, 20:41

Ευχαριστώ!
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Τα πάντα για την C

Δημοσίευσηαπό Ilias95 » 28 Απρ 2012, 13:57

Σε τι ακριβώς χρησιμεύουν τα configure files και πως γράφεται ένα;
Είναι συνδεδεμένα με τα προγράμματα που είναι γραμμένα σε C/C++ ή χρησιμοποιούνται και σε προγράμματα που είναι γραμμένα σε άλλες γλώσσες;

Επίσης έστω ότι έχω δημιουργήσει με το gettext κάποια binary αρχεία μετάφρασης (*.mo).
Αυτά θα πρέπει κατά την εγκατάσταση ενός προγράμματος να μεταφερθούν στους κατάλληλους καταλόγους του συστήματος.
Πως θα γίνει η παραπάνω διαδικασία; Πρέπει να γραφτεί κάτι μέσα στο Makefile ή αλλού;
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Τα πάντα για την C

Δημοσίευσηαπό migf1 » 28 Απρ 2012, 15:07

Ούτε εγώ έχω ασχοληθεί ιδιαίτερα, αλλά υπάρχουν tools όπως το pkg-config ή το πακέτο autotools της GNU, που αυτοματοποιούν κατά την εγκατάσταση του προγράμματός σου τις εξαρτήσεις του από βιβλιοθήκες και διαδρομές. Ο Σίμος τα ξέρει καλύτερα αυτά, οπότε ας περιμένουμε τη δική του απάντηση.
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Τα πάντα για την C

Δημοσίευσηαπό simosx » 29 Απρ 2012, 04:12

Ilias95 έγραψε:
Σε τι ακριβώς χρησιμεύουν τα configure files και πως γράφεται ένα;
Είναι συνδεδεμένα με τα προγράμματα που είναι γραμμένα σε C/C++ ή χρησιμοποιούνται και σε προγράμματα που είναι γραμμένα σε άλλες γλώσσες;


Μπορείς να χρησιμοποιήσεις τα automake/autotools σε προγράμματα από διάφορες γλώσσες.
Γενικά είναι δύσκολο να φτιάξεις τα απαραίτητα αρχεία από την αρχή, οπότε ο κόσμος επαναχρησιμοποιεί τα αρχεία αυτά από άλλα έργα.
Αυτό που προτείνω, και νομίζω ότι είναι αρκετά εύκολο, είναι να εγκαταστήσεις το πρόγραμμα Anjuta. Είναι περιβάλλον ανάπτυξης λογισμικού για λογισμικό GNOME, και μπορείς να ξεκινήσεις με τον οδηγό (wizard) που έχει για να φτιάξεις π.χ. ένα πρόγραμμα C όπου υποστηρίζει autotools/automake. Και εισάγεις εκεί μέσα το δικό σου κώδικα, ενώ τα αρχεία ./configure και τα υπόλοιπα είναι έτοιμα για σένα.
Έγραψα ένα άρθρο στο περιοδικό LinuxInside για το θέμα αυτό.
προσωπικό ιστολόγιο ϗ πλανήτης Ubuntu-gr
Συμβάλετε και εσείς στο ελληνικό βιβλίο Ubuntu!
1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 13.10 saucy 3.11.0-031100rc1-generic 64bit (el_GR.UTF-8, Unity ubuntu)
3 AMD E-450 APU with Radeon HD Graphics ‖ RAM 3555 MiB ‖ Sony Corporation VAIO
4 AMD nee ATI Wrestler [Radeon HD 6320] [1002:9806] {fglrx_pci}
5 eth0: Atheros Inc. AR8151 v2.0 Gigabit Ethernet [1969:1083] (rev c0) ⋮ wlan0: Atheros Inc. AR9285 [168c:002b] (rev 01)
Φτιάξτε και εσείς τη δική σας υπογραφή (παραπάνω κείμενο) αυτόματα με κλικ εδώ!
simosx
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 10334
Εγγραφή: 11 Μάιος 2008, 18:52
Launchpad: simosx
IRC: simosx
Εκτύπωση

Re: Τα πάντα για την C

Δημοσίευσηαπό simosx » 29 Απρ 2012, 04:16

Ilias95 έγραψε:
Επίσης έστω ότι έχω δημιουργήσει με το gettext κάποια binary αρχεία μετάφρασης (*.mo).
Αυτά θα πρέπει κατά την εγκατάσταση ενός προγράμματος να μεταφερθούν στους κατάλληλους καταλόγους του συστήματος.
Πως θα γίνει η παραπάνω διαδικασία; Πρέπει να γραφτεί κάτι μέσα στο Makefile ή αλλού;


Αν χρησιμοποιείς τα autotools, τότε όλα είναι εύκολα και αυτόματα. Ωστόσο, για να μάθεις, ίσως είναι καλό στην αρχή να τα κάνεις με το χέρι.
Για το πρόγραμμα που γράφεις στο github και έχω βάλει μια αρχική υποστήριξη για gettext, απομένει να
1. παράγεις το αρχείο .po που μετά θα το μεταφράσεις
2. θα δημιουργήσεις το παραγόμενο αρχείο .mo
3. θα βάλεις το αρχείο .mo στην κατάλογο /usr/local/share/locale/el/LC_MESSAGES/hunt.mo
Αν δεν είσαι σίγουρος για το όνομα/τοποθεσία της μετάφρασης, τότε μπορείς να τρέξεις και

Κώδικας: Επιλογή όλων
strace -f -o /tmp/mycalls.txt ./hunt


Έπειτα,
Κώδικας: Επιλογή όλων

grep open /tmp/mycalls.txt


Είναι μπακάλικος τρόπος για να διαπιστώσεις για το εκτελέσιμό σου, ποια αρχεία προσπαθεί να ανοίξει, οπότε καταλαβαίνεις που προσπαθεί να εντοπίσει τη μετάφραση.
προσωπικό ιστολόγιο ϗ πλανήτης Ubuntu-gr
Συμβάλετε και εσείς στο ελληνικό βιβλίο Ubuntu!
1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 13.10 saucy 3.11.0-031100rc1-generic 64bit (el_GR.UTF-8, Unity ubuntu)
3 AMD E-450 APU with Radeon HD Graphics ‖ RAM 3555 MiB ‖ Sony Corporation VAIO
4 AMD nee ATI Wrestler [Radeon HD 6320] [1002:9806] {fglrx_pci}
5 eth0: Atheros Inc. AR8151 v2.0 Gigabit Ethernet [1969:1083] (rev c0) ⋮ wlan0: Atheros Inc. AR9285 [168c:002b] (rev 01)
Φτιάξτε και εσείς τη δική σας υπογραφή (παραπάνω κείμενο) αυτόματα με κλικ εδώ!
simosx
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 10334
Εγγραφή: 11 Μάιος 2008, 18:52
Launchpad: simosx
IRC: simosx
Εκτύπωση

Re: Τα πάντα για την C

Δημοσίευσηαπό Ilias95 » 29 Απρ 2012, 12:39

@simosx
Ξέρω τη διαδικασία και που θα μπουν τα αρχεία. Ουσιαστικά το μόνο πρέπει να κάνω είναι να αντιγράψω το αρχείο .mo στον κατάλληλο κατάλογο.
(Παρεμπιπτόντως μάλλον εννοείς "/usr/share/locale/..." γιατί "/usr/local/share/locale/" δεν υπάρχει -στο σύστημα μου τουλάχιστον-.)

Η απορία μου είναι όμως πως θα κάνω αυτή την αντιγραφή των αρχείων κατά την εγκατάσταση.
Δηλαδή θα γράψω κάποιο setup script; Θα βάλω κάποιες εντολές μέσα στο Makefile; Θα γράψω κάποιο configure;
Πως συνηθίζεται να γίνεται;
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Τα πάντα για την C

Δημοσίευσηαπό simosx » 29 Απρ 2012, 13:21

Ilias95 έγραψε:
Η απορία μου είναι όμως πως θα κάνω αυτή την αντιγραφή των αρχείων κατά την εγκατάσταση.
Δηλαδή θα γράψω κάποιο setup script; Θα βάλω κάποιες εντολές μέσα στο Makefile; Θα γράψω κάποιο configure;
Πως συνηθίζεται να γίνεται;


Πρώτα από όλα,
Κώδικας: Επιλογή όλων

sudo mkdir -p /usr/local/share/locale/el/LC_MESSAGES/

Δεν έχεις εγκαταστήσει κάποιο πακέτο από πηγαίο κώδικα οπότε δε δημιουργήθηκε και ο κατάλογος.

Για το απλό πρόγραμμα που κάνεις, προτείνω για τώρα να φτιάξεις έναν κανόνα (rule) στο Makefile της μορφής
Κώδικας: Επιλογή όλων

install: hunt hunt.mo
cp hunt /usr/local/bin
cp hunt.mo /usr/local/share/locale/el/LC_MESSAGES/

και τέλος, για εγκατάσταση
Κώδικας: Επιλογή όλων

sudo make install


Για να φτιάξεις αρχείο configure (ουσιαστικά autotools), τότε όπως είπα παραπάνω, προτείνω να εγκαταστήσεις το Anjuta και να φτιάξεις ένα νέο έργο με τον οδηγό έργου (Project Wizard). Επιλέγεις για έργο στη γλώσσα C, και το έργο να είναι «Γενικής μορφής». Θα το έχεις έτοιμο σε λίγα δευτερόλεπτα. Έπειτα, πας στο τερματικό να κάνεις τα ./configure, make, sudo make install κτλ.

Ωστόσο, από εκπαιδευτικής πλευράς, προτείνω να κάνεις τα βασικά βήματα με το δικό σου Makefile (δίχως ./configure) ώστε να μάθεις τη διαδικασία. Κάτι που δε ρώτησες είναι το πως φτιάχνεις το .po. Αν έχεις απορίες σε αυτά τα βήματα, είναι καλό να τις επιλύσεις.
προσωπικό ιστολόγιο ϗ πλανήτης Ubuntu-gr
Συμβάλετε και εσείς στο ελληνικό βιβλίο Ubuntu!
1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 13.10 saucy 3.11.0-031100rc1-generic 64bit (el_GR.UTF-8, Unity ubuntu)
3 AMD E-450 APU with Radeon HD Graphics ‖ RAM 3555 MiB ‖ Sony Corporation VAIO
4 AMD nee ATI Wrestler [Radeon HD 6320] [1002:9806] {fglrx_pci}
5 eth0: Atheros Inc. AR8151 v2.0 Gigabit Ethernet [1969:1083] (rev c0) ⋮ wlan0: Atheros Inc. AR9285 [168c:002b] (rev 01)
Φτιάξτε και εσείς τη δική σας υπογραφή (παραπάνω κείμενο) αυτόματα με κλικ εδώ!
simosx
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 10334
Εγγραφή: 11 Μάιος 2008, 18:52
Launchpad: simosx
IRC: simosx
Εκτύπωση

Re: Τα πάντα για την C

Δημοσίευσηαπό pc_magas » 29 Απρ 2012, 13:35

Να πω την αλήθεια θα με ενδιέφερε και μένα το Makefile.
My blog|Κυπριακή Κοινότητα Ελευθέρου Λογισμικού Λογισμικού ανοικτού Κώδικα
Γνώσεις Linux:Ποτέ αρκετές|Προγραμματισμός: Php, javascript, nodejs, python, bash |Aγγλικά:Καλά
Οι υπολογιστές μου:
Spoiler: show
Ubuntu 16.04 64 bit σεIntel(R) Pentium(R) CPU G4400 @ 3.30GHz, 16Gib Ram, 500Gib Hard Disk, και κάρτα γραφικών Nvidia Geforce GT610
Lubuntu 14.04 σε Dell Inspiron mini 10(1010) intel Atom Z500 1Gb ram και gma500 (εδώθη σε άλλον)
Kubuntu 16.04 Lenovo G70 Intel i5 Nvidia Grapgics Card, Intel Graphics card (έχει 2) με Nouveau, 16Gb RAM, 126GB SSD Σκληρό Δίσκο
Άβαταρ μέλους
pc_magas
powerTUX
powerTUX
 
Δημοσιεύσεις: 2599
Εγγραφή: 12 Απρ 2009, 18:55
Τοποθεσία: Αχαρναί Αττικής
Launchpad: pc_magas
IRC: pc_magas
Εκτύπωση

Re: Τα πάντα για την C

Δημοσίευσηαπό Ilias95 » 29 Απρ 2012, 13:40

Σωστά, rule στο makefile. Τώρα κατάλαβα πως ακριβώς λειτουργεί.
Οπότε configure δεν χρειάζομαι ακόμα.

simosx έγραψε:Κάτι που δε ρώτησες είναι το πως φτιάχνεις το .po. Αν έχεις απορίες σε αυτά τα βήματα, είναι καλό να τις επιλύσεις.

Υπάρχει πληθώρα σχετικών οδηγών online.
Πχ. http://oriya.sarovar.org/docs/gettext_single.html και http://www.tuxamito.com/joomla/index.ph ... t-tutorial.
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Τα πάντα για την C

Δημοσίευσηαπό stamatiou » 29 Απρ 2012, 14:30

Παιδιά προσπαθώ να λύσω το δεύτερο πρόβλημα της Γ' Φάσης εκείνου του διαγωνισμού (http://www.pdp.gr/files/24c/PDP_24_C.pdf).
Ο αλγόριθμος έχει ως εξής:
Στην αρχή του λέω να βρει το μέσο του input και βάζω δύο integers, τον ένα πριν και τον άλλο μετά από αυτό. Μετά ελέγχω μέχρι πού είναι ίδιοι οι χαρακτήρες. Μετά του βάζω το mid όσο το μήκος - 1 και αρχίζω να βάζω τους χαρακτήρες που είναι πριν το τωρινό mid στις θέσεις μετά από αυτό.

Ο αλγόριθμος δεν ξέρω αν δουλεύει αλλά ο κώδικας μου βγάζει Segmentation Fault :P : http://ideone.com/doXzh
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

ΠροηγούμενηΕπόμενο

Επιστροφή στο Ανάπτυξη Λογισμικού / Αλγόριθμοι