• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed SFML - Code::Blocks, linkowanie statyczne - Problem.

VPS Starter Arubacloud
0 głosów
937 wizyt
pytanie zadane 30 października 2015 w C i C++ przez Caspariano Użytkownik (760 p.)
zamknięte 30 października 2015 przez Caspariano

Witam.
Postanowiłem "pobawić się" z biblioteką SFML. Wszystko śmiga, mógłbym zacząć kodować.. ale. W kodzie testowym przy linkowaniu natknąłem się na problem.Nie trwoniąc czasu:

 

zadeklarowałem makro SFML_STATIC, zlinkowałem statycznie lib'y tj.: 
     dla debug:  "libsfml-xxxx-s-d"
     dla release "libsfml-xxxx-s".
z tego co zrozumiałem pliki DLL mają być dzięki temu zintegrowane z plikiem .exe. Gdy próbuje skompilować program, c::b wyrzuca mi błąd że nie znalazł plików dll. tak więc wklejam je do katalogu z projektem, działa. Próbóję otworzyć program plikeim .exe, znów błąd z informacją o braku plików dll. Nie kumam przecież pliki dll miały być zintegrowane z plikiem exe dzięki statycznemu zlinkowaniu.

 

kod programu testowego:

#include <SFML/Graphics.hpp>

int main()
{
    sf::RenderWindow window(sf::VideoMode(200, 200), "SFML works!");
    sf::CircleShape shape(100.f);
    shape.setFillColor(sf::Color::Green);

    while (window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
                window.close();
        }

        window.clear();
        window.draw(shape);
        window.display();
    }

    return 0;
}

 

komentarz zamknięcia: Problem rozwiązany.

3 odpowiedzi

+1 głos
odpowiedź 30 października 2015 przez adrian17 Ekspert (344,100 p.)
wybrane 30 października 2015 przez Caspariano
 
Najlepsza

 c::b wyrzuca mi błąd że nie znalazł plików dll

Błąd podczas kompilacji czy uruchamiania?

W linkowaniu statycznym nie ma czegoś takiego jak DLL. To termin związany tylko z linkowaniem dynamicznym, więc coś musiałeś zrobić nie tak podczas konfiguracji. Zabierz te DLLe, bo ich w ogóle nie powinno być. Pokaż wszystkie opcje projektu i błędy.

komentarz 30 października 2015 przez furas Maniak (53,800 p.)
Widać na filmie, że adrian17 masz więcej bibliotek podlinkowanych
i może to robi różnicę :)
komentarz 30 października 2015 przez adrian17 Ekspert (344,100 p.)

No tak, bo proszą o to w tutorialu w uwadze na czerwono:

when static linking, you will have to link all of SFML's dependencies to your project as well.

komentarz 30 października 2015 przez Caspariano Użytkownik (760 p.)
Okay, działa. Zlinkowałem jeszcze
-opengl32
-jpeg
-winmm
-gdi32
Dziękuje Ci za pomoc, lecz mam  jeszcze jedno pytanie. O ile jpeg i freetype znajduja się w katalogu lib, to reszty tam nie ma, gdzię znajduja się te biblioteki?
komentarz 30 października 2015 przez adrian17 Ekspert (344,100 p.)
To pewnie biblioteki systemowe / ich porty pod GCC, wszystko powinno działać bez żadnych dodatkowych działań.
komentarz 10 marca 2017 przez Gramad Obywatel (1,660 p.)
Czy mógłbyś mi to objaśnić?
Mi działa bez linkowania opengl32, winmm ani gdi32. Nie mam w ogóle tych w plików w folderze lib
Jeżeli to biblioteki systemowe, to gdzie one są?
Myślałem że w Linker Settings można linkować biblioteki wyłącznie z lokacji podanej wcześniej w Search Directories
0 głosów
odpowiedź 30 października 2015 przez furas Maniak (53,800 p.)
Jeśli dobrze pamiętam to w statycznym linkowaniu nie linkuje się .dll (które z nazwy dll=dynamic linked library, służą jedynie do dynamicznego linkowani) tylko korzysta się z odmiany tej samej biblioteki ale z rozszerzeniem .lib.
komentarz 30 października 2015 przez Caspariano Użytkownik (760 p.)
No właśnie o to chodzi, mimo iż zlinkowałem lib'y statycznie, program upomina sie o dll'e
0 głosów
odpowiedź 30 października 2015 przez niezalogowany

W tym linku https://forum.pasja-informatyki.pl/53003/probuje-zainstalowac-biblioteke-sfml-w-code-blocks-i-wyskakuje-mi-blad dałeś pod komentarzem adriana parę screenshot'ów. Jak chcesz zlinkować biblioteki statycznie, to nazwy w Debug nie mogą być takie:

  • libsfml-graphics-s-d
  • libsfml-window-s-d
  • libsfml-system-s-d
  • libsfml-audio-s-d
  • libsfml-network-s-d

Tylko takie:

  • sfml-graphics-s-d
  • sfml-window-s-d
  • sfml-system-s-d
  • sfml-audio-s-d
  • sfml-network-s-d

Czyli, że bez tego przedrostka lib. Dla wersji Release musi być to samo, tylko że bez przyrostka -d. Spójrz jeszcze na tego linka http://szymonsiarkiewicz.pl/poradniki/sfml-kurs-podstawowy/sfml-i-codeblocks-mingw/

komentarz 30 października 2015 przez Caspariano Użytkownik (760 p.)
Zroibłem, to i nadal nie pozbyłem sie błędu.
komentarz 30 października 2015 przez niezalogowany
Dlatego ja po prostu dołączam te biblioteki ;) Nie będziesz mógł żyć bez tego linkowania statycznego? To tylko parę pliczków.
komentarz 30 października 2015 przez Caspariano Użytkownik (760 p.)

przez

dołączam te biblioteki

rozumiem wrzucenie plików dll do katalogu z projektem tak? Nie jest to dla mnie problemem, lecz kiedy próbuję odpalic program za pomocą pliku .exe również wyskakuje błąd i w tym przypadku doklejenie plików dll juz nie pomaga. Pozatym nie lubie pozostawiać otwartych pytań, jak nie zrozumiem tego teraz, to póżniej mogę mieć znowu z tym problem, ja chcę tylko zrozumieć.

komentarz 30 października 2015 przez niezalogowany
Ale jak chcesz odpalić z poziomu pulpitu, to te biblioteki skopiowałeś też do folderu z programem *.exe? Czyli do bin/Debug?
komentarz 30 października 2015 przez Caspariano Użytkownik (760 p.)
dokładnie tak, ale Adrian17 już pomógł mi rozwiązać ten problem.

Podobne pytania

–1 głos
0 odpowiedzi 196 wizyt
pytanie zadane 14 lutego 2017 w C i C++ przez Mateusz1223 Bywalec (2,440 p.)
0 głosów
0 odpowiedzi 208 wizyt
0 głosów
1 odpowiedź 153 wizyt

92,455 zapytań

141,263 odpowiedzi

319,100 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...