Nowe posty

xx Dystrybucja pod HP Omen (6)
Wczoraj o 23:30:08
xx [Poradnik] Wyszukiwanie Sterowników (2)
Wczoraj o 21:08:23
lamp Problem z Linux Lite po instalacji (0)
Wczoraj o 19:50:30
xx Ile pingwinów? (1)
Wczoraj o 08:59:24
xx konfiguracja pale moon (0)
2024-03-24, 21:53:42
xx Plasma 6 w Neonie ssie trochę mniej ... (10)
2024-03-23, 02:38:11
xx problem z instalacja sterowników do karty sieciowej (3)
2024-03-18, 18:10:16
xx Plik abc.001 (1)
2024-03-17, 17:48:27
xx Zlecę dopracowanie programu w MatLab (0)
2024-03-13, 15:28:40
xx Linux Mint 21.3 XFCE brak dźwieku po paru minutach (karta muzyczna zintegrowana) (5)
2024-03-12, 23:07:01

Autor Wątek: Programowanie - Help me, I'm newbie!!!  (Przeczytany 7719 razy)

Bakus

  • Gość
Programowanie - Help me, I'm newbie!!!
« dnia: 2005-06-07, 14:55:58 »
Mam następujący problem: pisze wysokopoziomową bibliotekę opartą na SDL i OpenGL która obsługuje mi tworzenie okna i inicjowanie OpenGL\\'a. Mam już ją całą napisaną, mam jednak mały problem z kompilacją:
Napisałem następującego Makefile:

main: main.o SDLWin.o
   g++ -o main SDLWin.o main.o `sdl-config --libs` -lGL -lGLU -lm

main.o: main.cpp SDLWin.h
   g++ -c main.cpp  `sdl-config --cflags`

SDLWin.o: SDLWin.h SDLWin.cpp
   g++ -c SDLWin.cpp  `sdl-config --cflags`

clean:
   rm -f main *.o

i po wpisaniu make wyskakuje mi następujący błąd:
g++ -o main SDLWin.o main.o `sdl-config --libs` -lGL -lGLU -lm
/usr/lib/gcc-lib/i486-slackware-linux/3.3.4/../../../../i486-slackware-linux/bin/ld: cannot find -lGLU
collect2: ld returned 1 exit status
make: *** [main] Error 1

Co może być źle? i co zrobić by wszystko się kompilowało???

Baqs

jk33

  • Gość
Programowanie - Help me, I'm newbie!!!
« Odpowiedź #1 dnia: 2005-06-07, 15:58:41 »
sproboj dac jeszcze flage -L/usr/X11R6/lib
byc moze Twoj kompilator suka bibliotek
tylko w /usr/lib.

pozdrawiam

Bakus

  • Gość
Programowanie - Help me, I'm newbie!!!
« Odpowiedź #2 dnia: 2005-06-07, 16:36:26 »
2005-06-07 15:58:41 jk33 napisał:

> sproboj dac jeszcze flage -L/usr/X11R6/lib
 > byc moze Twoj kompilator suka bibliotek
 > tylko w /usr/lib.
 >
 > pozdrawiam

THX, zadzałało :D.

Bakus

  • Gość
Programowanie - Help me, I'm newbie!!!
« Odpowiedź #3 dnia: 2005-06-06, 22:16:58 »
Jestem początkującym programistą linuksa, programowałem wcześniej w Windowsie, więc jestem przyzwyczajony do zintegrowanych środowisk programistycznych. Jestem w trakcie "przerzucania się" z Windowsa na Linuksa i uczę sie "jak w nim programować".
Niedawno napotkałem następujący problem: postanowiłem nauczyć się robić Makefile do moich programów, wziąłem więc się za neta i zacząłem o tym czytać. Potem zrobiłem prosty programik, żeby sprawdzić, czy make będzie działał (niestety nie działał).
Oto kod mojego programu:

// inc.h:
int func (int a);


// inc.cpp:
int func (int a)
{
    return a*2;
}


// main.cpp
#include
#include "inc.h"

int main (void)
{
    int a;
    a= func(2);
    printf("n%dn", a);
    return 0;
}


// Makefile:
prog: main.o inc.o
    g++ $(CFLAGS) -o prog main.o inc.o
main.o: main.cpp inc.h
    g++ $(CFLAGS) -c main.cpp
inc.o: inc.cpp inc.h
    g++ $(CFLAGS) -c inc.cpp
clean:
    rm -f *.o prog

Po napisaniu tego "bardzo długiego" programu wpisałem w linii poleceń, po znaku zachęty make i "wyskoczył" mi następujący błąd:
   Makefile:2: *** missing separator.  Stop.

Przypuszczam, że popełniłem jakiś prosty błąd (jakaś literówka lub coś takiego), ale nie mogę go znaleźć.
Bardzo proszę o szybką odpowiedź (... i nie besztajcie mnie zbytnio, ja jestem tylko nieszkodliwym niewbie).  :D

BaQs

xis

  • Gość
Programowanie - Help me, I'm newbie!!!
« Odpowiedź #4 dnia: 2005-06-06, 23:39:55 »
2005-06-06 22:16:58 Bakus napisał:

[ciach]
 >
 > // Makefile:
 > prog: main.o inc.o
 >     g++ $(CFLAGS) -o prog main.o inc.o
 > main.o: main.cpp inc.h
 >     g++ $(CFLAGS) -c main.cpp
 > inc.o: inc.cpp inc.h
 >     g++ $(CFLAGS) -c inc.cpp
 > clean:
 >     rm -f *.o prog
 >
 > Po napisaniu tego "bardzo długiego" programu wpisałem w linii poleceń, po znaku
 > zachęty make i "wyskoczył" mi następujący błąd:
 >    Makefile:2: *** missing separator.  Stop.
 >

Makefile używa separatora w linijce pod nazwą reguły. Musisz użyć podwójnego wcięcia tabulacją pod każdą nazwą reguły.
Najlepiej (chyba) pisać Makefile w edytorach, które mają podświetlanie składni (ja polecam konsolowy mcedit). One ładnie pokazują te wcięcia lub ich brak.

Powodzenia

PS. Na przyszłośc postaraj się lepiej precyzować problem w tytule wątku (to tak gwoli besztania ;) )

de_laurent

  • Gość
Programowanie - Help me, I'm newbie!!!
« Odpowiedź #5 dnia: 2005-06-06, 23:54:02 »
Nie znam sie kompletnie na programowaniu, ale:

- jezeli tu masz srednik na koncu, po int, to...
 > // inc.h:
 > int func (int a);
 
 
- tutaj tez chyba powinien byc?
 > // inc.cpp:
 > int func (int a)
 

xis

  • Gość
Programowanie - Help me, I'm newbie!!!
« Odpowiedź #6 dnia: 2005-06-07, 09:01:56 »
2005-06-06 23:54:02 de_laurent napisał:

> Nie znam sie kompletnie na programowaniu, ale:
 >
 > - jezeli tu masz srednik na koncu, po int, to...
 >  > // inc.h:
 >  > int func (int a);
 >  
 >  
 > - tutaj tez chyba powinien byc?
 >  > // inc.cpp:
 >  > int func (int a)
 >  
 >

De_Laurent, nie. W pliku .h (nagłówkowym) jest tylko deklaracja tej f-cji. Przedstawia się tam jej nazwę i parametry.
W pliku .c (kodzie) zaś, jest definicja, a więc nazwa, parametry i ciało (to ta część w klamerkach).

Pozdrówka

Bakus

  • Gość
Programowanie - Help me, I'm newbie!!!
« Odpowiedź #7 dnia: 2005-06-07, 14:33:08 »
2005-06-06 23:39:55 xis napisał:

> 2005-06-06 22:16:58 Bakus napisał:
 >
 > [ciach]
 >  >
 >  > // Makefile:
 >  > prog: main.o inc.o
 >  >     g++ $(CFLAGS) -o prog main.o inc.o
 >  > main.o: main.cpp inc.h
 >  >     g++ $(CFLAGS) -c main.cpp
 >  > inc.o: inc.cpp inc.h
 >  >     g++ $(CFLAGS) -c inc.cpp
 >  > clean:
 >  >     rm -f *.o prog
 >  >
 >  > Po napisaniu tego "bardzo długiego" programu wpisałem w linii poleceń, po
 > znaku
 >  > zachęty make i "wyskoczył" mi następujący błąd:
 >  >    Makefile:2: *** missing separator.  Stop.
 >  >
 >
 > Makefile używa separatora w linijce pod nazwą reguły. Musisz użyć podwójnego wcięcia tabulacją
 > pod każdą nazwą reguły.
 > Najlepiej (chyba) pisać Makefile w edytorach, które mają podświetlanie składni (ja polecam
 > konsolowy mcedit). One ładnie pokazują te wcięcia lub ich brak.
 >
 > Powodzenia
 >
 > PS. Na przyszłośc postaraj się lepiej precyzować problem w tytule wątku (to tak gwoli besztania
 > ;) )
 >

THX, po prostu nie wiedziałem, że trzeba stosować podwójne wcięcia (myślałem, że się stosuje pojedyncze). Wiedziałem, że to będzie właśnie błąd tego typu. Thx za pomoc.

BaQs

wojtekm

  • Gość
Programowanie - Help me, I'm newbie!!!
« Odpowiedź #8 dnia: 2005-06-07, 17:55:13 »
2005-06-07 14:33:08 Bakus napisał:

 > THX, po prostu nie wiedziałem, że trzeba stosować podwójne wcięcia (myślałem, że się stosuje
 > pojedyncze). Wiedziałem, że to będzie właśnie błąd tego typu. Thx za pomoc.

Tak naprawdę, to chodzi o zwykły znak tabulacji, a że mcedit w standardowej konfiguracji naciścięcie tabulatora traktuje jako 4 spacje, a 8 spacji jak jeden znak tabulacji to inna śpiewka.
W przeciętnym edytorze tekstowym wystarczy po prostu wstawić jedną tabulację.

Wojtek