• 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
1,061 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 (349,820 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 (349,820 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 (349,820 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 266 wizyt
pytanie zadane 14 lutego 2017 w C i C++ przez Mateusz1223 Bywalec (2,440 p.)
0 głosów
0 odpowiedzi 226 wizyt
0 głosów
1 odpowiedź 187 wizyt

93,018 zapytań

141,984 odpowiedzi

321,282 komentarzy

62,364 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

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...