Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

C & C++ linkovanje

[es] :: C/C++ programiranje :: C & C++ linkovanje

[ Pregleda: 2882 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

duke
Goran Terzić
Beograd

Član broj: 650
Poruke: 20
*.verat.net

ICQ: 22253993
Sajt: alas.matf.bg.ac.yu/~duke


Profil

icon C & C++ linkovanje02.08.2001. u 01:25 - pre 276 meseci
Zna li neko kako da povezem C i C++ module, pri cemu main() treba da se nalazi u C modulu? Dakle, nije problem kako napisati C f-ju koja se moze pozvati iz C++ (extern "C"), vec obrnuto, kako da iz C f-je pozovem neku koja je C++.

Pretpostavljam da je to moguce uraditi tako sto iz .o fajla izvucem 'pravo' ime C++ f-je, pa onda to ime koristim za poziv, ali vise bi mi odgovaralo neko cistije resenje.

Naravno, koristim gcc (3.0), ali bi mi dobro dosao i odgovor vezan za druge kompajlere i operativne sisteme (da im bas ne spominjem imena, znate sigurno na koga mislim)
 
Odgovor na temu

Vojislav Milunovic

Član broj: 25
Poruke: 2117
*.verat.net



+1 Profil

icon Re: C & C++ linkovanje02.08.2001. u 10:22 - pre 276 meseci
A sto ne kompajliras oba programa sa g++ (C++ kompajlerom pa ih onda ulinkujes??? )
 
Odgovor na temu

tOwk
Danilo Šegan
Zemun/Beograd

Član broj: 94
Poruke: 2743
*.rcub.bg.ac.yu

ICQ: 9344053
Sajt: alas.matf.bg.ac.yu/~mm011..


+2 Profil

icon Re: C & C++ linkovanje03.08.2001. u 04:18 - pre 276 meseci
pa funkciju koju pises u C++ definisi kao extern "C", i onda nju pozivas bez problema iz C-a. Ukoliko treba napravis je samo kao interfejs izmedju C-a i prave funkcije, npr:
Code:
extern "C" mojafunc(int p) {
   mojafunc_cpp(int p);
}

Kompajliras svaki od ovih u objektne module (znaci sa gcc koristis -c, npr. "gcc -c -o mojcpp.o mojprog.cpp" i "gcc -c -o mojc.o mojprog.c" i na kraju ih linkujes sa ld, ekvivalentno za druge kompajlere).

Tako bi to trebalo da radi, medjutim nisam mnogo isprobavao, pa me ne drzi za rec.

Toliko.
Možda se moje mišljenje promenilo, ali ne i činjenica da sam u pravu.
 
Odgovor na temu

tOwk
Danilo Šegan
Zemun/Beograd

Član broj: 94
Poruke: 2743
*.rcub.bg.ac.yu

ICQ: 9344053
Sajt: alas.matf.bg.ac.yu/~mm011..


+2 Profil

icon Re: C & C++ linkovanje03.08.2001. u 04:21 - pre 276 meseci
Moram da dodam jos nesto.

Koje ce ime biti u objektnom fajlu zavisi od kompajlera, i najverovatnije ce biti isto kao i ono koje si definisao (npr. mojafunkcija_cpp), ili mozda sa crticom ispred (_mojafunkcija_cpp). Problem moze jedino nastati u tome kako se prosledjuju parametri, a posto C++ nisam mnogo koristio ne znam da li je isto kao i za C. Ako je isto, onda ne bi trebao da imas ikakvih problema pri obicnom pozivanju funkcije (onda nema razlike u deklaraciji, pa prema tome ne bi imalo smisla postojanje 'extern "C"'...).

Toliko.
Možda se moje mišljenje promenilo, ali ne i činjenica da sam u pravu.
 
Odgovor na temu

duke
Goran Terzić
Beograd

Član broj: 650
Poruke: 20
*.verat.net

ICQ: 22253993
Sajt: alas.matf.bg.ac.yu/~duke


Profil

icon Re: C & C++ linkovanje03.08.2001. u 07:31 - pre 276 meseci
Citat:

Tako bi to trebalo da radi, medjutim nisam mnogo isprobavao, pa me ne drzi za rec.


Ja jesam isprobavao nesto jako slicno ovome sto si ti napisao (trenutno nisam u stanju da proverim, ali to je to) i naravno nije radilo. Medjutim, ono sto je predator napisao je pravo resenje!

Inace, sto se tice imena koja kompajleri daju c++ funkcijama .... Nije to da bas samo dodaju _ ispred imena, dodaju i tipove parametara i ime klase i svasta ...

Jos jednom, hvala predatoru, ne mogu jos da proverim da li ce to raditi, ali ne vidim zasto ne bi?
 
Odgovor na temu

tOwk
Danilo Šegan
Zemun/Beograd

Član broj: 94
Poruke: 2743
*.rcub.bg.ac.yu

ICQ: 9344053
Sajt: alas.matf.bg.ac.yu/~mm011..


+2 Profil

icon Re: C & C++ linkovanje03.08.2001. u 22:53 - pre 276 meseci
Parametri ne ulaze u sastav objektnih fajlova, kao ni tip funkcije ni nista.

Svaka funkcija vraca int (standardni tip na platformi na kojoj se radi), a on se razlicito interpretira u zavisnosti od potrebe, kao pointer ukoliko se radi o strukturama, nizovima, pointerima, kao sam int za cele brojeve, a najverovatnije i kao pointer za floating point brojeve ukoliko ne mogu da stanu u int. Prema tome, to i nema potrebe beleziti u objektni fajl, a i jasno je da je tako, jer nam ne bi onda uz silne biblioteke bili potrebni i header (.h) fajlovi, vec bi se sve citalo iz objektnih fajlova.

Sto se tice klasa i objekata, to isto spada u opis funkcije. Tacno je, naravno, da se ime tada generise na razne nacine i to zavisi od kompajlera do kompajlera, ali ono sto je bitno nije nacin definisanja imena, vec nacin prenosenja parametara. C++ standard nije bio definisan do nedavno ja mislim, pa je svaka implementacija C++ kompajlera mogla na svoj nacin da izvede prenosenje parametara.

Prema tome, od kompajlera zavisi kakvo ce ime imati funkcija u objektnom fajlu, kao i kako ce se prenositi parametri. Zato se i ne mogu mesati GCC C++ kompajler i Borland C kompajler, ili obrnuto.

Jedino ne razumem zasto ne bi onako sve radilo, ali naravno, jedno resenje moze biti sve kompajlirati sa C++ kompajlerom.

Toliko.
Možda se moje mišljenje promenilo, ali ne i činjenica da sam u pravu.
 
Odgovor na temu

[es] :: C/C++ programiranje :: C & C++ linkovanje

[ Pregleda: 2882 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.