Flin Skrevet 5. oktober 2012 Del Skrevet 5. oktober 2012 Hei. Jeg har lastet ned et bibliotek for å gjøre numerisk integrasjon i fortran, men hver gang jeg skal bruke den må jeg kompilere med masse .o filer. Ser etter en mulighet for å legge til en path der kompilatoren ser etter objekt filer når den kompilerer slik at jeg kan kalle rutiner som ligger i de filene uten å tenke noe mer over det. Lenke til kommentar
tingo Skrevet 5. oktober 2012 Del Skrevet 5. oktober 2012 Hmm, dersom dette er et bibliotek så burde det vel egentlig installeres på systemet ditt etter at du har kompilert det? Slik at du kan bruke -L (eller var det -l) for å referere det når du kompilerer et program. Bruker ikke gfortran, så jeg kan ikke være mer spesifikk, dessverre. Lenke til kommentar
Flin Skrevet 6. oktober 2012 Forfatter Del Skrevet 6. oktober 2012 Det er en mulighet og den jeg i grunn bruker nå, men skulle ønske at jeg kunne slippe det. Legge det til som standard path for kompilatoren eller noe sånt. Lenke til kommentar
8086 Skrevet 6. oktober 2012 Del Skrevet 6. oktober 2012 Jeg kan ikke si annet enn at dette er et spørsmål det vil ta kort tid å få gode svar på ved å legge det på StackOverflow. 1 Lenke til kommentar
asicman Skrevet 6. oktober 2012 Del Skrevet 6. oktober 2012 Hei. Jeg har lastet ned et bibliotek for å gjøre numerisk integrasjon i fortran, men hver gang jeg skal bruke den må jeg kompilere med masse .o filer. Ser etter en mulighet for å legge til en path der kompilatoren ser etter objekt filer når den kompilerer slik at jeg kan kalle rutiner som ligger i de filene uten å tenke noe mer over det. Du skal kunne bruke -Wl, opsjonen for å passere opsjoner til linkeren som listen av objekt filer. gfortran kan også kompilere fortran kode til object filer (*.o filer) med -c opsjonen, for deretter å linke disse i sammen og lage en eksikverbar (typisk elf fil). Til dette bruker man vanligvis ld. For å automatisere denne prosessen bruker man ofte make. Lenke til kommentar
Flin Skrevet 6. oktober 2012 Forfatter Del Skrevet 6. oktober 2012 Alt det går bra, men jeg har mange .o filer og det er derfor tungvint å lake make eller script filer for hver gang jeg kaller en rutine. Fant ut at jeg kan lage et bibliotek, men nå får jeg problemer med linkeren(ld). /usr/bin/ld: 2: /usr/bin/ld: Syntax error: newline unexpected collect2: ld returned 2 exit status Har googlet litt rundt dette, men finner ikke helt ut hvordan jeg løser problemet. Prøvde å installere ld, men det hjalp ikke. Lenke til kommentar
asicman Skrevet 6. oktober 2012 Del Skrevet 6. oktober 2012 Alt det går bra, men jeg har mange .o filer og det er derfor tungvint å lake make eller script filer for hver gang jeg kaller en rutine. Fant ut at jeg kan lage et bibliotek, men nå får jeg problemer med linkeren(ld). /usr/bin/ld: 2: /usr/bin/ld: Syntax error: newline unexpected collect2: ld returned 2 exit status Har googlet litt rundt dette, men finner ikke helt ut hvordan jeg løser problemet. Prøvde å installere ld, men det hjalp ikke. Du skal ikke behøve å lage script/makefile hver gang du skal kompilere. Hvis du forklarer hvor .o filene dine ligger og hva du gjør i dag så er det enklere å hjelpe deg. Feilen i fra ld sier ikke så mye hvis du ikke forklarer hva du har forsøkt å gjøre. Det kan se ut som om du har forsøkt å linke en ren tekst-fil e.l. siden den klager på newline. Lenke til kommentar
Flin Skrevet 6. oktober 2012 Forfatter Del Skrevet 6. oktober 2012 Du missforstår, jeg bruker en pakke som består av veldig mange filer og forskjellige rutiner fra den fra pakka trenger et stort antall filer for å kunne kjøre. Resultatet er at hver gang jeg vil bruke en ny funksjon så må jeg styre med alle disse .o filene. Jeg fant ut at en mulig løsning var å lage et bibliotek og det fungerte fint, men når jeg prøver å linke de med ld(-l flagget) så får jeg den feilen. Så det jeg har gjort er å lage et bibliotek quad.a og lagt det så prøver jeg å linke det til resten med -lquad. Lenke til kommentar
asicman Skrevet 6. oktober 2012 Del Skrevet 6. oktober 2012 Du missforstår, jeg bruker en pakke som består av veldig mange filer og forskjellige rutiner fra den fra pakka trenger et stort antall filer for å kunne kjøre. Resultatet er at hver gang jeg vil bruke en ny funksjon så må jeg styre med alle disse .o filene. Som sagt så burde ikke det være noe stort problem og lage en makefile eller script som linker inn alle .o filene via wildcards, men det er ikke så lett å si hvis du ikke vil si litt om hvor filene ligger osv. Du skal kunne skrive f.eks. (uten at jeg har testet det) gfortran mittprogram.f -c -o mittprogram.o ld /path/til/o/filer/*.o mittprogram.o -L/path/til/ditt/gfortran/lib -lgfortran -o mittprogram Dersom filene er helt statiske så er det enkelt å lage et library som du har forsøkt. Men som sagt hvis du ikke kan forklare hva du har forsøkt å gjøre så er det ikke så lett i å spekulere i hva som er feil. Lenke til kommentar
asicman Skrevet 6. oktober 2012 Del Skrevet 6. oktober 2012 Med ar burde det bli noe som (igjen utestet): ar cr mittlib.a /path/til/o/filer/*.o ld -lmitt mittprogram.o -L/path/til/ditt/gfortran/lib -lgfortran -o mittprogram Lenke til kommentar
asicman Skrevet 6. oktober 2012 Del Skrevet 6. oktober 2012 Så det jeg har gjort er å lage et bibliotek quad.a og lagt det så prøver jeg å linke det til resten med -lquad. Det burde da typisk hete quadlib.a Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå