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:
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.
Tylko się cieszyć, że takie artki powstają i trafiają we właściwe miejsce.
Ś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 !
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? 🙂
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?
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.
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
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…
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…
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:
nie mogę się do stać do działu Artykuły. kliknięcie na Artykuły w menu nie powoduje nic – zero reakcji.
A to prawda. Chociaż ja akurat teraz próbuję w GCC 2.95.3.
Spróbowałem. Kompiluje się z komunikatem:
main.cpp:41: warning: `used’ attribute directive ignored
i potem w binarce nie ma wersji.
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
.
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.
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?
Jak to nie ma rady, oczywiście, że da się uzyskać datę z automatu. W makefile’u piszesz w te słowa:
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).
Oooo, super. Sprawdziłem i… działa! Te wszystkie makefile nigdy nie przestaną mnie zadziwiać. 🙂
Dzięki za pomoc po raz kolejny.