Autor Wątek: Kompilacja Ogre + CEGUI w niestandardowej konfiguracji  (Przeczytany 1036 razy)

Offline vshader

  • Użytkownik
    • VShader - strona domowa

# Czerwiec 30, 2009, 17:57:02
Witam
Kompiluję sobie silnik Ogre (v. 1.6.2), pod Linuksem rzecz jasna (GCC v.4.4.0) :). Zdecydowałem się na użycie STLport, co pociągnęło za sobą rekompilację paru powiązanych bibliotek, m.in. CEGUI (v.0.6.2). Kompilacja OgreMain i większości komponentów przebiega prawidłowo, sypie się jednak podczas kompilacji samplesów korzystających z CEGUI.
Przykładowo, demo OceanDemo wyrzuca:
Samples/OceanDemo/src/OceanDemo.cpp:1237: undefined reference to `CEGUI::operator+(CEGUI::String const&, stlp_std::basic_string<char, stlp_std::char_traits<char>, stlp_std::allocator<char> > const&)'
(...)
Jest to jak widać związane z STLport. Make próbuje linkować z wersją CEGUI zainstalowaną w systemie wykorzystującą libstdc++ zamiast moją wykorzystującą STLport.
Wersję CEGUI przy konfiguracji OGRE'a ustawiłem tak:
export CEGUI_CFLAGS="-I/home/vshader/Programming/Libs/CEGUI/include"
export CEGUI_LIBS="-L/home/vshader/Programming/Libs/CEGUI/lib -lCEGUIBase"
Jak widać, opcja -lCEGUIBase po definicji katalogu powinna (tak mi się wydaje) odnosić się do tej we wskazanym katalogu. Tak się jednak nie dzieje.
W konsoli pojawia się takie coś:
libtool: link: g++ -g -O2 -fPIC -o .libs/OceanDemo MaterialControls.o OceanDemo.o  -L/mnt/shared2/vshader/Programming/Libs/ogre-1.6.2/OgreMain/src -L/mnt/shared2/vshader/Programming/Libs/ogre-1.6.2/Samples/Common/CEGUIRenderer/src /mnt/shared2/vshader/Programming/Libs/ogre-1.6.2/OgreMain/src/.libs/libOgreMain.so -L/home/vshader/Programming/Libs/STLport/lib /usr/lib64/libfreetype.so /usr/lib64/libzzip.so -lXaw /usr/lib64/libXt.so /usr/lib64/libSM.so /usr/lib64/libICE.so -L/home/vshader/Programming/Libs/CEGUI/lib /usr/lib64/libCEGUIBase.so /mnt/shared2/vshader/Programming/Libs/ogre-1.6.2/Samples/Common/CEGUIRenderer/src/.libs/libCEGUIOgreRenderer.so -lstlport -L/usr/local/lib /usr/local/lib/libOIS.so -L/usr/X11R6/lib /usr/lib64/libX11.so /usr/lib64/libxcb.so /usr/lib64/libXau.so /usr/lib64/libXdmcp.so -lCg -lfreeimage -lpthread -lz -lm -ldl -Wl,-rpath -Wl,/usr/local/libKonkretnie to:
-L/home/vshader/Programming/Libs/CEGUI/lib /usr/lib64/libCEGUIBase.soNie mam pojęcia skąd się tu bierze ścieżka bezwględna do /usr/lib64. Tam znajduje się biblioteka CEGUI korzystający z libstdc++. Nie mam pojęcia dlaczego make zamienia moją definicję na swoją ścieżkę absolutną. Jeżeli sam wywołam tę linię, tzn. dając w konsoli
g++ (...) -L/home/vshader/Programming/Libs/CEGUI/lib -lCEGUIBase (...)kod kompiluje się bez żadnych błędów.

Pozdrawiam

EDIT: OK, problem rozwiazany. Winna okazała się opcja -lCEGUIBase. Okazuje się że make/g++ rozwija tą opcję w poszukiwaniu pierwszej pasującej biblioteki w systemie. Rozwiązaniem okazało się:
export CEGUI_LIBS="-L/home/vshader/Programming/Libs/CEGUI/lib /home/vshader/Programming/Libs/CEGUI/lib/libCEGUIBase.so"Nie wiem czy -L jest wtedy potrzebne, zostawiłem tylko na wszelki wypadek :)
« Ostatnia zmiana: Lipiec 01, 2009, 03:28:43 wysłana przez vshader »

Offline Mr. Spam

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