[#1] [VBCC] biblioteki otwierane automatycznie
Czy istnieje taka możliwość, aby VBCC nie ładował mi konkretnych bibliotek w startup? Od kiedy zrobiłem sobie możliwość otwierania GUI do narzędzia dla CLI, to ładowana jest automatycznie asl.library nawet jeśli nie korzystam z GUI, przez jakiś czas zastanawiałem się, czemu na jednej dyskietce po zbootowaniu i uruchomieniu programiku nic się nie dzieje, nawet po wpisaniu na początku programu printf("costam");. Dopiero snoopdos wykazał mi, że próbuje ładować asl.library, której nie było na dyskietce.
[#2] Re: [VBCC] biblioteki otwierane automatycznie

@san_u, post #1

Linkuj z minstart.o i bez -lauto?
[#3] Re: [VBCC] biblioteki otwierane automatycznie

@san_u, post #1

Musisz po prostu sam zadeklarować bazę biblioteki jako globalną zmienną oraz oczywiście ją otworzyć/zamknąć. Kod który automatycznie otwiera wszystkie biblioteki działa na zasadzie takiej, że podrzuca linkerowi potencjalnie brakujące symbole zmiennych dla baz bibliotek. Teraz jeżeli linkerowi brakuje takiej zmiennej bo ty jej sam nie zadeklarowałeś to wciąga on moduł (z libauto właśnie) który wygląda mniej więcej tak:

- deklaracja globalnej zmiennej
- konstruktor otwierający bibliotekę
- destruktor zamykający bibliotekę

Jako że te moduły (każda biblioteka ma osobny) są linkowane na końcu to w przypadku kiedy ty sam dostarczysz taki symbol to linker po prostu nie dołączy tego dodatkowego kodu.
[#4] Re: [VBCC] biblioteki otwierane automatycznie

@forge, post #2

Możnaby, ale nie dla gościa, który w C z ledwością skrobie
Spróbowałem, ale wyskoczyło mi od groma brakujących referencji, a ja jestem za niski, by je wszystkie ogarnąć, jednak w przypadku braku -lauto brak referencji do _AslBase nakierował mnie we właściwym kierunku.
[#5] Re: [VBCC] biblioteki otwierane automatycznie

@kiero, post #3

To wiele wyjaśnia, rozwiązanie leżało w zasięgu ręki. Po usunięciu -lauto linker zaczął krzyczeć, że brak symbolu _AslBase, pomyślałem więc, by spojrzeć, gdzie to w proto/asl.h jest deklarowane, a tam tylko jedna deklaracja pomijając kolejne #inlcude:

#ifndef __NOLIBBASE__
extern struct Library *AslBase;
#endif


więc w pliku głównym zrobiłem tak jak mówisz:

#define __NOLIBBASE__
struct Library *AslBase = NULL;
#include <proto/asl.h>
#undef __NOLIBBASE__
.
.
.
if((AslBase = OpenLibrary("asl.library", 37L)) == NULL) {
		printf("Cannot open asl.library\n");
		return 1;
	}


i faktycznie, asl.library już się nie ładuje z automatu.
Dziękuję

Ostatnia aktualizacja: 01.03.2021 15:42:30 przez san_u
Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem