MorphOS.pl – Polska strona użytkowników MorphOS-a
MorphOS.pl – Polska strona użytkowników MorphOS-a

Artykuły, artykuły…22 czerwca 2011

Pomału przybywa nam na portalu artykułów. Co prawda większość z nich to artykuły o programowaniu pod MorphOS-em przetransferowane z MorphZone Library, ale niejako na zamówienie pojawił się nowy artykuł (niestety, też programistyczny) o pisaniu własnych kodów startowych w programach. Zapraszamy do lektury i komentowania.

Zamieszczone przez: admin, 18 komentarzy

Komentarze:

  • AvatarMDW

    A ja chciałem coś zapytać odnośnie $VER. Jakoś ciągle nie mogę sprawić żeby ten ciąg znaków był także w binarce skompilowanej z optymalizacją (-O1, -O2). Jak używam -O0 to oczywiście jest.

  • Avatarkrashan
    A ja chciałem coś zapytać odnośnie $VER. Jakoś ciągle nie mogę sprawić żeby ten ciąg znaków był także w binarce skompilowanej z optymalizacją (-O1, -O2). Jak używam -O0 to oczywiście jest.

    No nie żartuj, ja kompiluję z -O2 i jest.

  • Avatarede

    Świetny materiał dydaktyczny. Rzuca światło na wiele niedomówień zaistniałych w skromnej literaturze jaką posiadam. W dobie słabej dostępności literatury polskojęzycznej dotyczącej programowania naszych ulubionych systemów – szczelgólnie MorphOSa wiadomości bezcenne. Wielkie Dzięki dla Kraszana !

  • AvatarMDW
    No nie żartuj, ja kompiluję z -O2 i jest.

    No to ja nie wiem dlaczego u mnie przy optymalizacji to to $VER jest wycinane. Może spróbować to niby gdzieś użyć w kodzie? Tak żeby kompilator myślał, że jest to potrzebne/używane? 🙂

  • Avatarkrashan
    No nie żartuj, ja kompiluję z -O2 i jest.

    No to ja nie wiem dlaczego u mnie przy optymalizacji to to $VER jest wycinane. Może spróbować to niby gdzieś użyć w kodzie? Tak żeby kompilator myślał, że jest to potrzebne/używane? 🙂

    A spróbuj tego helloworlda skompilować, tam we flagach kompilatora jest -O2. Kompilowałem zarówno GCC 2 jak i GCC 4, w obu przypadkach version string jest… Może masz jeszcze jakąś inną flagę dodaną, która Ci go wywala? Albo masz jakieś inne kwalifikatory przy definicji zmiennej?

  • Avatarkrashan
    Świetny materiał dydaktyczny.

    Dorzuciłem jeszcze jeden z MorphZone. Teraz pracuję nad dużym (chyba trzyczęściowy będzie) artykułem na temat klasy List w MUI. W międzyczasie poprzerzucam wszystkie z MorphZone, żeby były w jednym miejscu.

  • AvatarMDW
    A spróbuj tego helloworlda skompilować, tam we flagach kompilatora jest -O2. Kompilowałem zarówno GCC 2 jak i GCC 4, w obu przypadkach version string jest… Może masz jeszcze jakąś inną flagę dodaną, która Ci go wywala? Albo masz jakieś inne kwalifikatory przy definicji zmiennej?

    Spróbowałem HelloWorld z Twojego przykładu i przy -O2 wersja jest w binarce. Czyli wszystko jest tak jak być powinno.

    U mnie plik main kompiluje się tak:
    g++ -O2 -noixemul -traditional-cpp -c -o o/gcc-morphos-stable/main.o main.cpp

  • Avatarkrashan
    U mnie plik main kompiluje się tak:
    g++ -O2 -noixemul -traditional-cpp -c -o o/gcc-morphos-stable/main.o main.cpp

    No to są dwie możliwości. Albo robi to flaga -traditional-cpp, chociaż nie wydaje mi się, albo po prostu kompilator C++ optymalizuje tę zmienną inaczej…

  • AvatarMDW
    U mnie plik main kompiluje się tak:
    g++ -O2 -noixemul -traditional-cpp -c -o o/gcc-morphos-stable/main.o main.cpp

    No to są dwie możliwości. Albo robi to flaga -traditional-cpp, chociaż nie wydaje mi się, albo po prostu kompilator C++ optymalizuje tę zmienną inaczej…

    Wywaliłem "-traditional-cpp" i nadal było to samo. Jak dodałem gdzieś w main.cpp:
    printf("%s", (unsigned char*)VTag);
    to wersja jest w binarce. 🙂 No bez sensu normalnie. Przecież wszystkie amigowe programy mają $VER, większość używa optymalizacji i mają wersję.
    Teraz myślę jak użyć tej stałej żeby jej kompilator z jakiegoś powodu nie wycinał. Hmmm…

  • Avatarkrashan
    No bez sensu normalnie. Przecież wszystkie amigowe programy mają $VER, większość używa optymalizacji i mają wersję.

    Ale też większość amigowych programów nie jest pisana w C++ i/lub nie jest kompilowana GCC 4. Spróbuj dodać w definicji version stringa (np. na początku) to:

    __attribute__ ((used))
  • Avatarpero

    nie mogę się do stać do działu Artykuły. kliknięcie na Artykuły w menu nie powoduje nic – zero reakcji.

  • AvatarMDW
    Ale też większość amigowych programów nie jest pisana w C++ i/lub nie jest kompilowana GCC 4.

    A to prawda. Chociaż ja akurat teraz próbuję w GCC 2.95.3.

    Spróbuj dodać w definicji version stringa (np. na początku) to:

    __attribute__ ((used))

    Spróbowałem. Kompiluje się z komunikatem:
    main.cpp:41: warning: `used’ attribute directive ignored
    i potem w binarce nie ma wersji.

  • Avatarkrashan
    nie mogę się do stać do działu Artykuły. kliknięcie na Artykuły w menu nie powoduje nic – zero reakcji.

    Na razie jeszcze tego działu nie ma. Fakt, że wszystkie artykuły mieszczą się w ramce „Dzieje się” (klikamy na „artykuły”), wpływa demobilizująco na kodera MorphOS.pl. Ale ponieważ szykuję trzyczęściowy artykuł o klasie List w MUI, mieścić się w ramce przestaną i trzeba będzie zrobić stronę działu .

  • Avatarkrashan
    Spróbowałem. Kompiluje się z komunikatem:
    main.cpp:41: warning: `used’ attribute directive ignored
    i potem w binarce nie ma wersji.

    Zgadza się. Ale eksperymentalnie doszedłem, że dla C++ trzeba wywalić „CONST” (oczywiście „used” jest zbędne, skoro i tak ignorowane). Sprawdzałem na GCC4 z optymalizacjami -O2 i -O3. W związku z tym wywaliłem CONST z artykułu i przykładowego kodu.

  • AvatarMDW
    Ale eksperymentalnie doszedłem, że dla C++ trzeba wywalić „CONST” (oczywiście „used” jest zbędne, skoro i tak ignorowane). Sprawdzałem na GCC4 z optymalizacjami -O2 i -O3. W związku z tym wywaliłem CONST z artykułu i przykładowego kodu.

    No i rozwiązałeś zagadkę. Faktycznie po usunięciu CONST wersja jest także przy -O2. Fajnie. 🙂 Dzięki za pomoc!

    A tak jeszcze przy okazji zapytam choć wiem, że i tak nie ma na to rady. Czy nie dałoby się zautomatyzować daty w tym ciągu $VER? Czasem używałem __DATE__ ale z tego co kiedyś mi pisałeś to jest niezgodne ze standardem $VER. Nie da się jakoś uzyskać osobno dnia, miesiąca i roku?

  • Avatarkrashan
    A tak jeszcze przy okazji zapytam choć wiem, że i tak nie ma na to rady. Czy nie dałoby się zautomatyzować daty w tym ciągu $VER? Czasem używałem __DATE__ ale z tego co kiedyś mi pisałeś to jest niezgodne ze standardem $VER. Nie da się jakoś uzyskać osobno dnia, miesiąca i roku?

    Jak to nie ma rady, oczywiście, że da się uzyskać datę z automatu. W makefile’u piszesz w te słowa:

    BUILD_DATE = $(shell /c/date lformat "%d.%m.%Y")
    CFLAGS += -D__BUILD_DATE__=\"$(BUILD_DATE)\"

    a następnie używasz __BUILD_DATE__ zamiast __DATE__. Swego czasu byłem przekonany, że miesiąc i dzień muszą być bez zer wiodących, ale na MorphOS-ie zarówno komenda version jak i Ambient, jak i klasa Aboutbox, która jest pod względem formatu version stringa wręcz pedantyczna, akceptują zera wiodące. Przy okazji wyjaśnię czemu wpisałem „/c/date”, a nie po prostu samo polecenie. W SDK jest uniksowe polecenie date o innej zupełnie składni. Przy odpalaniu z makefile ma ono priorytet, dlatego podałem ścieżkę, żeby odpalało się to morphosowe. A no i założyłem, że flagi kompilatora trzymasz w zmiennej $(CFLAGS).

  • AvatarMDW
    Jak to nie ma rady, oczywiście, że da się uzyskać datę z automatu.

    Oooo, super. Sprawdziłem i… działa! Te wszystkie makefile nigdy nie przestaną mnie zadziwiać. 🙂
    Dzięki za pomoc po raz kolejny.

  • Dodaj komentarz

    Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.