Toon posts:

[C/C++] missing library

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik wil onder linux een programma schrijven waarin ik van meerder threads gebruik maak. Maar als ik gebruik maak van de pthread_xxxx functies, kan ie mijn programma niet linken. Hij geeft aan dat bijvoorbeeld pthread_create(...) een [i]undefined reference[i] is. Hieruit maak ik op dat er vermoedelijk alleen een header file van is en niet de library zelf.

Maar hoe kom je erachter welke library je daar voor nodig hebt?

  • Klippy
  • Registratie: Oktober 2000
  • Laatst online: 22:10

Klippy

Still Game

Zover ik weet heeft de library dezelfde naam als de h file.

Misschien moet je 'm wel in de resources zetten zelf.

Steam | SXQncyBhbGwgZ29vZCwgbWFuISDwn5iO


Verwijderd

Topicstarter
LiquidSilver schreef op 10 september 2002 @ 12:58:
Zover ik weet heeft de library dezelfde naam als de h file.
Klopt, libpthread.so :)
LiquidSilver schreef op 10 september 2002 @ 12:58:
Misschien moet je 'm wel in de resources zetten zelf.
Klopt vast ook, maar hoe krijg ik 'm dan statisch meegelinkt. Of misschien zelf dynamisch, maar dat heeft niet echt prioriteit. (gcc heeft nogal veel command line options, die ik nu noodgedwongen aan het doornemen ben).

  • PrinsEdje80
  • Registratie: Oktober 2001
  • Laatst online: 01-01 15:26

PrinsEdje80

Holographic, not grated...

code:
1
gcc programma.cc -o programma -L/path/waarin/extra/libs/staan -llibnaamzonderliben.soof.a

Used to be Down Under... Foto gallery


Verwijderd

Topicstarter
je zou toch denken dat ie alles in /usr/lib wel zou mee pakken???

  • Dash2in1
  • Registratie: November 2001
  • Laatst online: 31-08 22:49
hangt van je settings en zo af.

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 23:52
Om welk operating system gaat 't?

Onder BSD moet je -pthread meegeven aan de linker, waardoor 'ie automatisch tegen libpthread (en de reentrant C library) linkt. Windows heeft geen standaard POSIX thread implementatie, dus daar hangt van de specifieke library af die je gebruikt.

Statisch linken doe je met -static; de compiler pakt dan zelf de .a file in plaats van de .so file.

Verwijderd

Verwijderd schreef op 10 september 2002 @ 14:10:
je zou toch denken dat ie alles in /usr/lib wel zou mee pakken???
Nee man! Weet je wel hoe onhandig dat is? Dan linkt ie tegen allemaal libjes die ie niet nodig heeft en kost 't opstarten van zo'n proggie wel 10x zo lang. Dus hoe meer je installeert, hoe slomer *alles* wordt...

Hmm, toch maar niet. ;).

en je moet dus -lpthread meegeven om aan de pthread library te linken.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 21:01

.oisyn

Moderator Devschuur®

Demotivational Speaker

Verwijderd schreef op 10 september 2002 @ 14:41:
[...]


Nee man! Weet je wel hoe onhandig dat is? Dan linkt ie tegen allemaal libjes die ie niet nodig heeft en kost 't opstarten van zo'n proggie wel 10x zo lang. Dus hoe meer je installeert, hoe slomer *alles* wordt...

Hmm, toch maar niet. ;).

en je moet dus -lpthread meegeven om aan de pthread library te linken.


niet helemaal correct, een lib is in principe een setje object files, en alleen de object files waar symbols in staan die tot dusver unresolved zijn worden meegelinkt. Dus al zou ie alle libs meenemen om te controleren, dan nog linkt ie niet automatisch met al die libs :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Verwijderd schreef op 10 september 2002 @ 14:10:
je zou toch denken dat ie alles in /usr/lib wel zou mee pakken???
Om even terug te grijpen op een ander topic: en DAAR maak je dus een makefile voor :)

Professionele website nodig?


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

.oisyn schreef op 10 september 2002 @ 15:22:
niet helemaal correct, een lib is in principe een setje object files, en alleen de object files waar symbols in staan die tot dusver unresolved zijn worden meegelinkt. Dus al zou ie alle libs meenemen om te controleren, dan nog linkt ie niet automatisch met al die libs :)
Hij doet er echter waarschijnlijk wel een paar uur over per link, maja als je toch al alles include vanuit 1 cpp-file kijk je bij een build niet op een uurtje meer of minder...

* curry684 voelt dat het punt er eindelijk doorkomt bij unteraarsch }) >:) })

Professionele website nodig?


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 21:01

.oisyn

Moderator Devschuur®

Demotivational Speaker

@ curry

* lol *
dat doet me denken aan vroeger, toen ik nog maar net met C bezig was... toen deed ik dat ook nog, en mijn 'libs' waren gewoon header files in mijn include dir met full source.
Toen ik wat grotere programma's begon te schrijven begon ik me echt gigantisch te ergeren aan de lange compile tijd :P

En later stuitte ik op een ander aardigheidje: ik had meestal 1 grote header per project, die werd geinclude vanuit alle source files. Kwam er echter een functie bij in 1 van de sources, dan moest die header file dus ook worden aangepast om die functie te declareren. En aangezien die header file een dependancy is van al die source files moest _alles_ opnieuw gecompiled worden. En sindsdien split ik mijn sources en headers zoveel mogelijk op en include ik alleen datgene wat nodig is :Y)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

offtopic:
Een tip voor het maken van een makefile met gcc/g++: compile de main files van je project met:
g++ -MM main.cc > Makefile
En je dependencies zijn al gegenereerd ;)

[ Voor 0% gewijzigd door Verwijderd op 10-09-2002 17:01 . Reden: typo ]


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 20:12

Creepy

Tactical Espionage Splatterer

curry684 schreef op 10 september 2002 @ 16:25:
[...]

Hij doet er echter waarschijnlijk wel een paar uur over per link, maja als je toch al alles include vanuit 1 cpp-file kijk je bij een build niet op een uurtje meer of minder...

* curry684 voelt dat het punt er eindelijk doorkomt bij unteraarsch }) >:) })
:)

Mietje: Handige tip! Die wist ik nog niet... scheelt zelf weer Makefile bakken (of automake scripts...)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
curry684 schreef op 10 september 2002 @ 16:25:
[...]

Hij doet er echter waarschijnlijk wel een paar uur over per link, maja als je toch al alles include vanuit 1 cpp-file kijk je bij een build niet op een uurtje meer of minder...

* curry684 voelt dat het punt er eindelijk doorkomt bij unteraarsch }) >:) })
You evil bastard :)

Maar over het andere topic, toen had ik het niet over libraries, maar over alleen mijn source. Maaruhh. ja. Ik begin het idee achter die libraries ddor te krijgen, maar nog steeds vind ik het gebruik van makefiles maar wazig. Sommige makefiles zijn een programmeer project op zich zelf.

Wat ik niet snap is dat als ik onder linux bijvoorbeeld socket.h include, deze ook zonder de nodige handmatige linker acties??
Het zijn natuurlijk wel kernel libraries...

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Onder windows hoef je ook niet handmatig aan te geven dat je kernel32.lib en user32.lib mee wil linken, die staan overal default meegenomen. Onder windows moet je echter bijvoorbeeld wininet.lib (internet helper lib) wel expliciet meelinken.

Professionele website nodig?


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 21:01

.oisyn

Moderator Devschuur®

Demotivational Speaker

curry684: overigens niet als je vanaf de commandline linkt :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1