Gå til innhold

Legge til .o filer som standard i gfortran


Anbefalte innlegg

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
Videoannonse
Annonse

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
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

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

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

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

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...