Kompatybilność w Dev C++

0

Witam.

Skompilowałem w Dev C++ na Windowsie niewielki program, który korzysta z kilku dodatkowych bibliotek (OpenCV oraz Audiere). Na moim komputerze działa bez problemów, ale na innym nie che się uruchomić (nawet po wrzuceniu do folderu z programem wszystkich plików .dll, o które prosi, pojawia się jakiś Visual C++ runtime error). Jestem początkujący i nie wiem jak to skompilować, by było "niezawodne". To, co mi przychodzi do głowy, to zintegrowanie projektu przy kompilacji w ten sposób, by był w 100% w jednym pliku - to znaczy bez konieczności dołączania bibliotek dynamicznych .dll i tym podobnych, ale na razie mi się to nie udało (może nieumiejętnie, ale sporo się naszukałem). Jak to zrobić? Da się w Dev C++?

0

JAKI error.

0

Właśnie żaden konkretny. W okienku było napisane "Visual C++ runtime error"; aplikacja została zamknięta z powodu nieoczekiwanego błędu. Obecnie nie mam dostępu do tamtego komputera by zrobić zrzut ekranu, ale zapewniam, że żadnej dodatkowej informacji nie było. Problem pojawiał się zarówno gdy aplikacja była skompilowana jako "okienkowa", jak i "konsolowa".

Skoro to coś "wizualnego" jest w tym błędzie, zastanawiam się czy problemem może być brak zainstalowanego OpenCV (biblioteki, z której korzystałem) w tamtym systemie - wrzucenie używanych .dll widocznie nie wystarcza. Dlatego myślę o skompilowaniu w całości do jednego .exe, bez zewnętrznych bibliotek (wydaje mi się, że to ma nazwę static linking? - w każdym razie nie udało mi się tego zrobić).

0

oj, chłopie..
"Visual C++" to nie jest nic "wizualnego", ale to nazwa kompilatora pochodzacego z Microsoftu, z pakietu VisualStudio.

"Visual C++ runtime error" oznacza totalny crash aplikacji. Szkoda ze nie zapisales sobie szczegolow tego bledu - jakies details albo cos moglo byc wyswietlone pod 'rozwijanym przyciskiem'. Ale moglo i nie byc, zalezy jak byl kod skompilowany. Na pewno gdzies na dysku pojawil Ci sie wtedy crashdump ktory troche by powiedzial, ale teraz to mozna szukac wiatru w polu jak juz tego kompa nie masz.

Ogolnie, "Visual C++ runtime error" zazwyczaj to, jak to w C++, AccessViolation/0xC0000005. W momencie gdyby brakowalo jakichs DLLek, dostalbys raczej ładniejszy błąd 'windowsowy' mowiacy o "Błędnej konfiguracji aplikacji". Ale to ciezko powiedziec, bo jesli aplikacja sama sobie recznie ladowala je przez LoadLibrary -- to AccViol jest tez bardzo prawdopodobny jesli ktos nie-do-testowal co LoadLibrary zwraca.. Jesli skopiowales naprawde wszystkie potrzebne biblioteki, to static linking nie sadze aby pomogl. Tak czy owak, "Visual C++ runtime error" prawie zawsze swiadczy o bledzie w samej aplikacji, albo w bibliotece ktorej ta app uzywa.

0

Dzięki za informacje. Spróbuję może w takim razie użyć kompilatora innego niż Dev C++ (o kompilatorze Visual C++ wiem, ale nie sądziłem, że może mieć coś wspólnego z błędem uruchomienia, skoro go nigdzie nie mam). Zastanawia mnie tylko, że jeśli jest błąd w bibliotekach, jak mówisz, to wtedy i tak nie zadziała. To dosyć dziwne, bo, jak wspominałem, na kompie, w którym kompilowałem program działa bezbłędnie. Może to sprawa innej wersji Windowsa...

Tak czy inaczej dzięki jeszcze raz.

0
  1. blad mowi o visual c++, poniewaz ktoras z bibliotek/modulow ktore skopiowales/wlaczyles do exeka zostalo skompilowanych tym kompilatorem. pewnie wlasnie opencv albo audiere. w nich wystapil blad, byc moze popluczyny po innym wczesniejszym bledzie, i fragmenty runtime'u visualc++owego dolaczone w tych biblioteach wyswietlily Ci msgboxa informujacego o bledzie
  2. czy przeczytales 'details' tego bledu?
  3. jesli u Ciebie dziala, a nigdzie indziej nie, to sprobuj poza tym nigdzie-indziej, jeszcze dodatkowo na jakims innym kompie gdzie jest ten sam kopmilator rowniez zainstalowany. Jesli tam nagle ruszy - lub jesli jest to blad "wersji windowsa" --- to znaczy, ze NIE skopiowales wszystkich bibliotek i na tych-kompach-gdzie-nie-dziala brakuje RUNTIME'u zwiazanego z Twoim kompilatorem. Brakuje paczki DLLek, ktore KOMPILATOR zaklada ze ZAWSZE beda, poniewaz sa "systemowe". Kompilator na pewno podczas instalacji u Ciebie je doinstalowal, a tam ich nie ma... szukaj dla Twojego kompilatora jakichs malych dllek upchanych w paczki/instalatory nazwane "runtime" albo "redistributables". ew. mozesz sprobowac w opcjach ustawic linkowanie statyczne z runtime'm, nie dynamiczne. Jednak to by bylo dziwne. Windowsy powyzej XP zwykle zglaszaja "zla konfiguracja aplikacji" w takich przypadkach. Noooo.. chyba, ze Twoj kompilator nie wygenerowal manifestu jak nalezy.. Po dev moglbym sie tego nawet spodziewac. Wtedy mogloby byc i crash w takiej formie
0

Pokombinuję i będę korzystał z tych wskazówek. Wtedy nie zauważyłem szczegółowych informacji, ale kiedy uda mi się to znowu przetestować, będę na to zwracał specjalną uwagę. Dzięki.

0

Po wielu eksperymentach z kompem kolegi, koleżanki, Virtual Boxem, Dev C++, Visual C++ i nowszą wersją OpenCV, doszedłem do wniosku, że jedynym problemem (prawie na pewno) jest to, że biblioteka OpenCV nie widzi kamery pod Windowsem XP.

Pod Windows 7 program działa (także na takim, gdzie nie ma kompilatorów itp). Wyrobiłem sobie zdanie, że ogólnie OpenCV jest niedopracowane pod względem obsługi kamery. Na Ubuntu też za cholerę nie mogłem dostać obrazu z kamery - pewnie dałoby się zrobić, ale nie tak prosto, jak powinno.

Jako że nie wiem jak to rozwiązać w ramach samego OpenCV, zacząłem się rozglądać za alternatywną metodą wyciągania klatek z kamery. Znacie może jakąś prostą bibliotekę, która mi to umożliwi?

0

systemowa biblioteka dll avicap32 zawiera wszystkie funkcje. przyklad uzycia jest pokazany w programach przykladowych FASM, niestety w assemblerze, jednak ladnie widac uzycia funkcji API, takze analogiczny kod mozna dostac w C++
http://flatassembler.net/examples/fasmcam.zip

luknij takze tutaj:
http://www.codeguru.com/Cpp/G-M/multimedia/video/article.php/c1601

1 użytkowników online, w tym zalogowanych: 0, gości: 1