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

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

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

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

Δημοσίευσηαπό migf1 » 25 Ιαν 2012, 01:41

Καλησπέρα.

Καταρχήν βλέπω πως στο πηγαίο αρχείο τη συνάρτηση την ονομάζεις calculation() αλλά στο header αρχείο την λες: calculator(). Οπότε, το 1ο που πρέπει να κάνεις είναι διορθώσεις αυτό, κι επίσης μέσα στο header file βάλε και το keyword extern πριν από το int στη δήλωση της συνάρτησης, που σημαίνει πως αυτή η συνάρτηση θα μπορεί να χρησιμοποιηθεί και σε πηγαία αρχεία που δεν περιέχουν τον ορισμό της ;)

Έπειτα, για αρχή δοκίμασε να το κάνεις στατική βιβλιοθήκη και όχι shared. Ακόμα καλύτερα, για αρχή δοκίμασε το με σκέτο το object file.

Δηλαδή...

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

gcc -c calculator.c

Κατόπιν, στο πηγαίο αρχείο του άλλου προγράμματος, το cal_mean.c βάλε...

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

#include <stdio.h>
#include "calculator.h"

int main( void )
{
printf( "%d\n", calculator( 10, 4, 1);
return 0;
}

Και κάνε το compile...

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

gcc calc_mean.c calculator.o

Λογικά θα σου δουλέψει, το τεστάρεις με...

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

./a.out

Και ξεκινά το μετά από εκεί σύμφωνα με τα βήματα που έχω γράψει στο προηγούμενο ποστ, για να το κάνεις μια στατική βιβλιοθήκη: libcalculator.a, κλπ κλπ ;)
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

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

Δημοσίευσηαπό Star_Light » 25 Ιαν 2012, 03:35

Γεια σου migf1 :D θα δω αυτα που μου ειπες και αν ειναι θα τα κανω edit σε αυτο το ποστ

προς το παρον επειδη εψαχνα το keyword extern να δω τι σημαινει εκτενεστερα επεσα πανω σε ενα καλο λινκ

που εχει μαζεμενα ολα τα keywords της C -> http://tigcc.ticalc.org/doc/keywords.html ;)

EDIT: Βασικα εκανα ολα οσα μου ειπες

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

#include<stdio.h>
#include "calculator.h"

int main(void)
{
int a,b,c,h;

/*printf("Dwse to a \n : ");
scanf("%d",&a);

printf("Dwse to b \n : ");
scanf("%d",&b);

printf(" Dwse to h \n : ");
scanf("%d",&h);

c=calculator(a,b,h); */

printf("%d", calculator(1,2,1));

printf("To apotelesma einai: %d" , c);
return 0;
}



και

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

kostas@kostas-SSL:~/PROGRAMS$ cat calculator.h
extern int calculator(int a , int b , int h);
kostas@kostas-SSL:~/PROGRAMS$ gcc -c calculator.c
kostas@kostas-SSL:~/PROGRAMS$ gcc simple_calculations.c -o calculator.o
/tmp/cc72SkxM.o: In function `main':
simple_calculations.c:(.text+0x18): undefined reference to `calculator'


btw νομιζω για να μην μπερδευομαι αδικα μου ειπες να αλλαξω το ονομα της συναρτησης ωστε να συμβαδιζει με το ονομα του αρχειου :D αλλιως δεν ημουν υποχρεωμενος. Μονο στην Java το εκανα αυτο!
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

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

Δημοσίευσηαπό migf1 » 25 Ιαν 2012, 04:04

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

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

Δημοσίευσηαπό Star_Light » 25 Ιαν 2012, 04:10

εγω εχω τα

1. calculator.c (ορισμος της συναρτησης)
2. calculator.h (δηλωση της συναρτησης)
3. simple_calculations.c (προγραμμα στο οποιο θα χρησιμοποιησω την συναρτηση του αρχειου 1)

και ενα ακομη αντικειμενικο του 3

ιδια τα εχω ρε συ :S

Κώδικας: Επιλογή όλων
kostas@kostas-SSL:~/PROGRAMS$ ls | grep calculator
calculator
calculator.c
calculator.h
libcalculator.a
kostas@kostas-SSL:~/PROGRAMS$
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

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

Δημοσίευσηαπό migf1 » 25 Ιαν 2012, 04:14

Την συνάρτηση την έχεις ορίσει με άλλο όνομα μέσα στο calculator.c και με άλλο όνομα την έχεις δηλώσει μέσα στο calculator.h
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

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

Δημοσίευσηαπό migf1 » 25 Ιαν 2012, 04:17

Άσχετο, το grep γιατί το κάνεις piped με το ls;

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

ls calculator*

αρκεί ;)
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

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

Δημοσίευσηαπό Star_Light » 25 Ιαν 2012, 04:20

migf1 έγραψε:Την συνάρτηση την έχεις ορίσει με άλλο όνομα μέσα στο calculator.c και με άλλο όνομα την έχεις δηλώσει μέσα στο calculator.h

οπα ναι είχες δικιο! :/

Αλλα και παλι που παω να δημιουργησω το αντικειμενικο μετα με gcc
το ιδιο σφαλμα βγαζει με μη ορισμενη αναφορα στο calculator :/

migf1 έγραψε:Άσχετο, το grep γιατί το κάνεις piped με το ls;

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

ls calculator*

αρκεί ;)


ωπ καλο!
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

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

Δημοσίευσηαπό migf1 » 25 Ιαν 2012, 04:21

σβήσε το .o ή κάνε το touch
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

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

Δημοσίευσηαπό Star_Light » 25 Ιαν 2012, 04:26

migf1 έγραψε:σβήσε το .o ή κάνε το touch


το κανα touch αλλα μετα το εσβησα παντελως.

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

kostas@kostas-SSL:~/PROGRAMS$ ls calculation*
ls: αδυναμία πρόσβασης του calculation*: Δεν υπάρχει τέτοιο αρχείο ή κατάλογος
kostas@kostas-SSL:~/PROGRAMS$ ls calculator*
calculator calculator.c calculator.h
kostas@kostas-SSL:~/PROGRAMS$ ls simple_*
simple_calculations.c simple_test simple_test.c
kostas@kostas-SSL:~/PROGRAMS$ gcc -c calculator.c
kostas@kostas-SSL:~/PROGRAMS$ gcc simple_calculations.c -o calculator.o
/tmp/cc10Dzu1.o: In function `main':
simple_calculations.c:(.text+0x14): undefined reference to `calculator'
collect2: ld returned 1 exit status
kostas@kostas-SSL:~/PROGRAMS$


:/
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

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

Δημοσίευσηαπό migf1 » 25 Ιαν 2012, 04:29

Παρέθεσε τα περιεχόμενα των 3 αρχείων.
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

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

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

cron