biblioteka .lib która zawiera inną bibliotekę .lib

0

Witam,
mam następujący problem posiadam biblioteke statyczną A.lib przy pomocy której chciałbym stworzyć inną bibliotekę B,lib która niejako zapewniłaby wysokopoziomowy dostęp ( zapakowała niskopoziomowe funkcje, mniejsza o to ). To co chce uzyskać to jedna biblioteka B, zawierająca w sobie funkcje biblioteki A ( brak konieczności importu A.lib)

Biblioteka B kompiluje się poprawnie, W ustawieniech Librarian zakładam dołącznie biblioreki A jako Additional Dependencies oraz katalog z Biblioteką jako Additional Library Directory oraz zaznaczam LINK LIBRARY DIRECTORY.

Pomimo tych ustawień przy wykorzystaniu B.lib konieczne jest dołączanie również pliku A.lib . Chciałbym tego uniknąć.

Sytuacja bardzo podobna jak w TUTAJ

screenshot-20170724173634.png
screenshot-20170724173716.png

0

Nie zlinkujesz statycznie dwóch statycznych bibliotek ze sobą, nie do tego służy linker. Potrzebujesz użyć do tego zewnętrznego tool'a żeby "skleić" ze sobą te dwie libki, na linuksie byłby nim ar, na windowsie nie wiem czego się używa.

edit
Wyguglałem, że dla windowsa to będzie LIB.

0

Według tego
https://stackoverflow.com/questions/2157629/linking-static-libraries-to-other-static-libraries
To co mówisz nie jest do końca prawdą.
Wydaje mi się, że Link Library Dependicies zapewnia właśnie takie możliwości.
Tutaj też wygląda to "podobnie" przy użyciu LIB.exe

lib /out:X.lib X.lib other1.lib other2.lib

według wspomnianego

screenshot-20170724181304.png

0

Visual ma fajny ficzer że w pliku .h można wciągać libki.

#pragma comment(lib, "a.lib")
#pragma comment(lib, "b.lib")

w ten sposób unikniesz potrzeby ręcznego dodawania a.lib i b.lib do opcji linkera. oczywiście obie libki i tak muszą być dostępne, linker po prostu weźmie je automatycznie.

0
Uczynny Ogórek napisał(a):

Według tego
https://stackoverflow.com/questions/2157629/linking-static-libraries-to-other-static-libraries
To co mówisz nie jest do końca prawdą.

Według tego, to co napisałem jest całkowitą prawdą. Ten "librarian" używa pod spodem LIBa.

Uczynny Ogórek napisał(a):

Wydaje mi się, że Link Library Dependicies zapewnia właśnie takie możliwości.

Nie. Link Library Dependencies "wciągnie" Ci pliki z innego projektu do Twojej biblioteki jeśli owa od nich zależy. Nie połączy Ci dwóch już skompilowanych bibliotek.

0

Plik .lib to takie archiwum zawierające wiele .obj. Zatem powinna być możliwość (i jest) spakowania kilku .obj w jeden plik .lib, wypakowania .obj z .lib oraz połączenia kilku plików .lib w jeden (choćby pośrednio przez przepakowanie wszystkich plików .obj).

To wygeneruje pliki a.obj i b.obj:

cl -c a.c
cl -c b.c

To z każdego pliku .obj wygeneruje osobną libkę:

lib a.obj /out:a.lib
lib b.obj /out:b.lib

To połączy obie libki w jedną (można też w tym poleceniu podać pliki .obj zamiast .lib):

lib a.lib b.lib /out:ab.lib

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