2017-01-07 14 views
6

Mam problem z GL na NixOS: problem wydaje się stary, ale wciąż nie ma prostego rozwiązania jeszcze w 2017 roku!NixOS, Haskell, opengl: problemy z budowaniem i uruchamianiem programów OpenGL

Próbuję zbudować program Haskell przy użyciu biblioteki Gloss. Zainstalowałem gloss i wszystko, czego potrzebuje, używając nix-shell -p mesa i wygląda na to, że został poprawnie zbudowany i zainstalowany (przy użyciu cabal install). Jednak gdybym zbudować program w tej samej nix-shell to nie działa:

$ nix-shell -p mesa_glu 

[nix-shell:]$ ghc --make -O2 SnakePar.hs 
Linking SnakePar ... 

[nix-shell:]$ ./SnakePar 
SnakePar: user error (unknown GLUT entry glutInit) 

podczas gdy na zewnątrz pracujące z nix-shell się failes etap Łączenie:

$ ghc --make -O2 SnakePar.hs 
[1 of 1] Compiling Main    (SnakePar.hs, SnakePar.o) 
Linking SnakePar ... 
/nix/store/<hash>-binutils-2.27/bin/ld: cannot find -lGLU 
/nix/store/<hash>-binutils-2.27/bin/ld: cannot find -lGL 
collect2: error: ld returned 1 exit status 
`cc' failed in phase `Linker'. (Exit code: 1) 

Dzieje się tak, mimo że zostały zainstalowane ręcznie glu biblioteka przez nix-env -iA.

$ nix-env -q 
cabal-install-1.24.0.0 
ghc-8.0.1 
glu-9.0.0 

Próbowałem, używając freeglut lub mesa w ten sam sposób, ale żadna z nich (lub nawet wszystkie razem) nie działa.

Czego mi brakuje?

Ta kwestia jest istotna, ale to nie pomaga: nixos + haskell + opengl (prerequisites)

Rozwiązanie: Po włączeniu stos wszystko działa.

+0

Czy możesz opublikować repozytorium, aby móc je odtworzyć? – iElectric

+0

@iElectric, może to być dowolny Gloss MWE (wystarczy wyświetlić koło, na przykład) lub coś bardziej interesującego, np. RosettaCode [gra snake] (http://rosettacode.org/wiki/Snake). – samsergey

+0

Po uważnym przeczytaniu tej strony nadal napotykam opisany problem podczas korzystania ze stosu/nixos/gloss.Byłbym bardzo wdzięczny, gdyby ktoś mógł przesłać minimalny przykład pracy do repozytorium github. To byłoby naprawdę miłe. –

Odpowiedz

4

I tylko stałe to po trzech dniach, dobrze, jest inny nie-szczęśliwy Arch-user-aż-ostatniego tygodnia: spróbuj dodać freeglut środowiska nix-shell, to znaczy używać nix-shell -p mesa freeglut.

Dla stack użytkowników natrafiają na tej odpowiedzi, dodać do ~/.stack/stack.yaml:

nix: 
    enable: true 
    packages: [mesa freeglut] 

Rozwiązanie nix-shell nie działa w tym przypadku - problem, jak zgaduję, że sterta jest zawsze działa wewnątrz czystego środowiska, nawet jeśli uruchomione z wnętrza nix-shell. Próbowałem pure: false w sekcji nix z stack.yaml, ale to nie zadziałało. To na razie.

  • mesa jest zobowiązany do przedstawienia nagłówki C dla OpenGLRaw i innych bibliotek (i dlatego łączenie nie powiedzie się w przypadku, wierzę).
  • freeglut zapewnia powiązania GLUT (w przeciwnym razie wystąpi błąd "nieznany błąd GLUT") w czasie wykonywania.

Może być konieczna zmiana mesa na inną, np. mesa_glu.

+0

uh, używa kabały, a nie stosu. – Vektorweg

+0

@Vektorweg dzięki za wskazanie tego! Zmodyfikowałem instrukcje; mam nadzieję, że będą działać w ich przypadku (chociaż nie używam 'cabal' i nie mogę być tego pewien). –

+0

Dziękujemy za wysiłek, aby pomóc, @Soham Chowdhury! Niestety, wypróbowałem wszystkie kombinacje 'mesa',' mesa + freeglut', 'mesa_glu + freeglut' itd. Nie działa. Wierzę, że problem nie dotyczy 'stack' lub' cabal', prawdopodobnie coś nie jest ustawione prawidłowo w moich środowiskach lub konfiguracjach systemu operacyjnego. Czy ktoś wie, czy istnieje coś takiego jak "glxgears", aby sprawdzić, czy OpenGL w ogóle działa? Nie mogłem go znaleźć na liście pakietów NixOs. – samsergey