Denna delen av 99 uppdateras inte längre utan har arkiverats inför framtiden som ett museum.
Här kan du läsa mer om varför.
Mac-nyheter hittar du på Macradion.com och forumet hittar du via Applebubblan.

getopt.h och malloc.h

Tråden skapades och har fått 6 svar. Det senaste inlägget skrevs .
1

Jag skall kompilera ett program men det använder #include <getopt.h> och #include <malloc.h> som inte används i Mac OS X.

Jag har testat att symlinka dem från min Fink-installation men det funkar inte iallafall. Finns det nån som har en (icke alltför avancerad) workaround så blir jag jätteglad.

  • Medlem
  • Umeå
  • 2003-06-09 15:14

man 3 getopt
Visar att i alla fall getopt() ligger i <unistd.h>, så getopt.h behövs nog inte.

man 3 malloc
visar att malloc() ligger i <stdlib.h>, så malloc.h behövs nog heller inte.

Mmmm... så tänkte jag också... men när jag tar bort hänvisningarna till dem så får jag en massa varningar och till slut ett error.

Om jag symlinkar in getopt.h och malloc.h från /sw/include/gnugetopt/getopt.h och /sw/include/graphviz/malloc.h till /usr/include/ får jag detta fel:
ld: Undefined symbols: _getopt_long

Jag gissar att det beror på att gcc inte hittar gnugetopt utan bara får den länkade getopt.h-filen.

Kan man istället lägga till en bättre sökväg till gnugetopt osv? Är jag helt ute och cyklar?

(Programmet i fråga är MegaHAL megahal.sourceforge.net -- det finns en Carbon-port, men jag vill göra ett par förändringar på det)

  • Oregistrerad
  • 2003-06-10 12:24
Citat:

Skrevs ursprungligen av FredrikHolmqvist
ld: Undefined symbols: _getopt_long

getopt_long är GNU och finns förmodligen inte i det BSD-ärvda C-libbet i OSX. Det enklaste är förmodligen att leta reda på en implementation av den och peta in i bygget (extrahera från glibc t.ex)

Jag fick göra så en gång när jag jobbade med NetBSD.

Observera alltså att headerfiler inte medför någon kod. Koden ligger i objektfiler som länkas till libraries etc.

EUREKA!!!

Jag kopierade filerna som gengetopt installerar till mappen med källkoden till programmet jag vill kompilera

lägger till

#include <getopt.h>
#include <getopt.c>
#include <getopt1.c>

överallt (i main.c och megahal.c) och skriver "make"... vips "megahal is up to date"

Ett litet steg för mänskligheten, men stort för mig.

  • Oregistrerad
  • 2003-06-12 15:28
Citat:

Skrevs ursprungligen av FredrikHolmqvist
#include <getopt.c>
#include <getopt1.c>

Det är rätt giftigt att göra include på kod... så länge det bara är från en fil går det men gör man det från fler kommer nog inte länkaren att bli så glad.

Det normala är väl att lägga till dem i lämplig Makefile?

Ja, det verkar lite dumt kanske...

Jag kan inte detta...
Huvudsaken är att jag fick det att funka. Hittade ett program som heter ConvertMake som konverterar till Project Builder-format, så nu har jag lagt till filerna på ett litet cleanare sätt hoppas jag.

1
Bevaka tråden