Autor Wątek: Ogre, statyczne linkowanie.  (Przeczytany 1437 razy)

Offline bleakdev

  • Użytkownik

# Lipiec 18, 2011, 20:15:27
Witam. Mam problem ze statycznym linkowaniem Ogre. Mój plik źródłowy wygląda na razie tak:
#define OGRE_STATIC
#define OGRE_STATIC_GL
#include <OGRE/Ogre.h>
#include <OGRE/OgreStaticPluginLoader.h>
#include <iostream>

int main(int argc, char **argv)
{
}
Podczas próby kompilacji dostaję:
/usr/local/include/OGRE/OgreStaticPluginLoader.h:40: error: OgreGLPlugin.h: No such file or directoryNagłówek którego mu brakuje wprawdzie znajduje się w katalogach ogra, ale w innym miejscu. Miałem pomysł, żeby wszystkie nagłówki przekopiować do swojego projektu i poprawić w nich lokalizacje, ale było to porażką, bo każda moja poprawka wprowadzała kolejne błędy w innych plikach.
Ogre sam kompilowałem (statycznie) biblioteki potrzebne mam podlinkowane, pracuję w QtCreator. System to Arch linux 64bit. Nie mam pojęcia jak ten problem rozwiązać, googlowałem już masę czasu i nic nie znalazłem, a autorzy silnika dosyć skąpo piszą o statycznym linkowaniu. Może ktoś będzie w stanie podpowiedzieć mi co robię źle, bo myślę, że to nie błąd silnika, tylko mój.
W silnikach jestem laikiem (to pierwszy którego chcę się nauczyć) więc proszę o wyrozumiałość.

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Xirdus

  • Redaktor

# Lipiec 18, 2011, 20:22:29
Nie przesuwaj plików - dodaj ścieżkę w opcjach projektu (poszukaj w internecie coś na kształt qtcreator include paths).

Offline Złośliwiec

  • Użytkownik
    • Dark Cult

# Lipiec 18, 2011, 20:29:01
Nagłówek którego mu brakuje wprawdzie znajduje się w katalogach ogra, ale w innym miejscu.

A w jakim miejscu się znajduje?

Poza tym jeśli dopiero zaczynasz, to może warto najpierw spróbować Irrlichta - uchodzi za dużo łatwiejszy.

Offline bleakdev

  • Użytkownik

# Lipiec 18, 2011, 20:58:21
Nagłówek znajduje się w /usr/local/include/OGRE/RenderSystems/GL/OgreGLPlugin.h

Wolałbym jednak pozostać przy ogre. Wiem, że sobie z nim poradzę, tylko te podstawy... Moje programowanie zawsze było związane z bibliotekami które łatwo się linkowało (SDL, OpenGL, Qt4, OpenAL etc.) i nie było za dużo filozofii, nie było też problemów z nagłówkami. Jeżeli będę miał przygotowane środowisko do pracy to ogra sobie spokojnie opanuję :D

Skończy mi się aktualizować drugi system to zaraz wrócę do Arch'a i będę próbował z dodaniem tej ścieżki. już wiem, że dodaje się przez INCLUDEPATH += <lokalizacja>.

Offline voytech

  • Użytkownik

# Lipiec 19, 2011, 01:33:20
Nagłówek znajduje się w /usr/local/include/OGRE/RenderSystems/GL/OgreGLPlugin.h

Możesz spróbować skopiować ten plik ze źródeł ale podejrzewam, że niewiele to pomoże. Być może konfigurator CMake szuka biblioteki statycznej OpenGL w systemie i stwierdziwszy, że jest tylko dynamiczna wyłącza tą opcję linkowania statycznego OGL?

Radzę raczej poszukać na forum i wiki Ogre. Tam prędzej znajdziesz rozwiązanie.

Tak swoją drogą, czy te #define GL_STATIC_GL jest konieczne? Może wystarczy w projekcie linkować RenderSystem_GLStatic.lib zamiast RenderSystem_GL.lib i być może tyle wystarczy?

Offline toxic

  • Użytkownik

# Lipiec 19, 2011, 11:38:06
Na ogrze 1.6 (czyli z dobre półtora roku temu) aby zlinkować się z ogrem statycznie musiałem:
  • dodać odpowiedniego inkluda przy kompilacji:
    CFLAGS += -I$(OGRE_DIR)/RenderSystems/GL/include
  • a potem jeszcze linkować się z RenderSystem_GL.a:
    OTHER_OBJECTS += $(OGRE_DIR)/RenderSystems/GL/src/.libs/RenderSystem_GL.a
+/- inne drobiazgi. Nie wiem jak jest teraz, ale pewnie podobnie: musisz wepchnąć do gardła inkluda "-IŚcieżka/RenderSystem/GL/cośtamcośtam", a potem linkować się z RenderSystem_GL.a (które sobie uprzednio skompilowałeś lub skądś pobrałeś). Jak to dokładnie zrobić to już pewnie sam obczaisz.

Offline bleakdev

  • Użytkownik

# Lipiec 19, 2011, 12:17:01
Działa :D Oto mój plik projektu z QtCreator'a, może komuś się w przyszłości przyda
LIBS += -lOgreMainStatic \
        -lpthread \
        -lboost_thread \
        -lfreeimage \
        -lfreetype \
        -lzzip \
        -lXaw7 \
        -lGL \
        -lz \
        -lXt \
        -lX11
INCLUDEPATH += \
        /usr/local/include/OGRE/ \
        /usr/local/include/OGRE/RenderSystems/GL/ \
        /usr/local/include/OGRE/Plugins/CgProgramManager/ \
        /usr/local/include/OGRE/Plugins/OctreeSceneManager/ \
        /usr/local/include/OGRE/Plugins/ParticleFX/ \
        /usr/local/include/OGRE/Plugins/BSPSceneManager/
SOURCES += \
        main.cpp
Cytuj
Możesz spróbować skopiować ten plik ze źródeł ale podejrzewam, że niewiele to pomoże.
Wcześniej też tak próbowałem, ale to nic nie dało.
Cytuj
Tak swoją drogą, czy te #define GL_STATIC_GL jest konieczne?
Z tego co wyszukałem w googl'ach to tak, jeżeli zerkniesz sobie do pliku OgreStaticPluginLoader.h to zobaczysz co się tam dzieje (jest definiowany obiekt renderer'a). Przy linkowaniu statycznym to jest wymagane (no chyba, że sam sobie ten obiekt zdefiniuję).

Bardzo wszystkim dziękuję za pomoc i pozdrawiam, sam bym pewnie jeszcze długo się z tym męczył :D