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

Tworzenie biblioteki dll.

VPS Starter Arubacloud
0 głosów
535 wizyt
pytanie zadane 10 października 2015 w C i C++ przez hit02 Nałogowiec (33,970 p.)

Ostatnio tworzę swoją bibliotekę do obsługi plików i mam problem z tym, że kompilator eksportuje wszystkie funkcje obecne w kodzie. Konkretniej kompiluję z lini poleceń następującą komendą:

gcc -Wall -Wextra -std=c99 -shared file.c -o file.dll

Chciałbym w bibliotece umieścić funkcję, która nie była by widoczna z zewnątrz, ale niestety kompilator eksportuje wszystko, jak leci. Czy jest jakiś sposób, na oznaczenie funkcji, jako nie-eksportowanej?

2 odpowiedzi

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

Chciałbym w bibliotece umieścić funkcję, która nie była by widoczna z zewnątrz, ale niestety kompilator eksportuje wszystko, jak leci.

Nie do końca rozumiem, z tego co wiem to symbole do wyeksportowania trzeba ręcznie zadeklarować dodając __attribute__ ((dllexport)). Możesz pokazać co konkretnie robisz i jak sprawdzasz co jest eksportowane?

Patrzyłeś na tutorial ze strony MinGW? http://www.mingw.org/wiki/sampledll

komentarz 10 października 2015 przez hit02 Nałogowiec (33,970 p.)
Na ten tutorial nie patrzyłem, ale chętnie zobaczę.

Kod wygląda tak, że funkcje mam deklaroane zwyczajnie, jak w pliku exe - bez żadnych atrybutów, a następnie kompiluję z opcją -shared.

Sprawdzam, co zostało wyeksportowane, za pomocą pluginu fileinfo do totalcmd. Obecnie mam tam wypisane wszystkie zadeklarowane prze ze mnie funkcje, oprócz DllMain().
komentarz 10 października 2015 przez hit02 Nałogowiec (33,970 p.)
Dodałem atrybut __declspec(dllexport) i kompilator zrozumiał, że reszta funkcji nie ma być wyeksportowana.

W międzyczasie znalazłem też coś takiego, jak #pragma weak nazwaSymbolu, które sprawia, że symbol nie jest eksportowany. Być może to pragma robi coś jeszcze, więc jak na razie wolę używać __declspec(dllexport).

Dzięki, za pomoc.
komentarz 10 października 2015 przez adrian17 Ekspert (344,100 p.)
Kurczę, nie zdążyłem, chciałem zrobić szybko pokaz: https://puu.sh/kF3T3/ca4d3b0cb8.mp4

Nigdy nie słyszałem by #pragma weak używało się normalnie do do takich zastosowań, więc bym unikał.
komentarz 10 października 2015 przez hit02 Nałogowiec (33,970 p.)

Dzięki za pokaz. laugh

Szczerze mówiąc, to pierwszy raz się spotkałem z #pragma weak, ale działało, więc napisałem. Na wikipedii jest napisane, że to sprawia, że symbol jest eksportowany, jako weak, czyli nadpisywalny przez symbole z atrybutem strong. (W takim razie, czemu nie miałem wyeksportowanego symbolu, to nie wiem.) Zatem lepiej używać __declspec(dllexport).

0 głosów
odpowiedź 10 października 2015 przez Patrycjerz Mędrzec (192,340 p.)
Odpowiem trochę nie na temat: nie lepiej skorzystać z kreatora DLL dostępnego m.in. w Code::Blocks?
komentarz 10 października 2015 przez hit02 Nałogowiec (33,970 p.)

Szczerze mówiąc, to nie przepadam za korzystaniem z IDE. Wolałbym to zrobić ręcznie. smiley

komentarz 10 października 2015 przez Patrycjerz Mędrzec (192,340 p.)

Podobne pytania

0 głosów
1 odpowiedź 1,088 wizyt
pytanie zadane 22 października 2020 w Systemy operacyjne, programy przez Pan_Pieczywko Nowicjusz (120 p.)
0 głosów
0 odpowiedzi 308 wizyt
pytanie zadane 28 listopada 2017 w C i C++ przez Hiskiel Pasjonat (22,830 p.)
0 głosów
3 odpowiedzi 236 wizyt
pytanie zadane 16 stycznia 2016 w C i C++ przez Prime_Bull Obywatel (1,820 p.)

92,452 zapytań

141,262 odpowiedzi

319,080 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!

...