[g++] kompilacja .lib

[g++] kompilacja .lib
cpp_beginer
  • Rejestracja:około 6 lat
  • Ostatnio:ponad 2 lata
  • Postów:105
0

Mam 3 pliki napisane przez kogoś innego:

RPRuntime.lib
RPRuntime.dll
RPRuntime.h

Pliku nagłówkowego RPRuntime.h chcę użyć w pliku main.cpp i skompilować.

Kopiuj
g++ -o test main.cpp -LRPRuntime.lib

Czy to jest poprawna komenda kompilacji? Wypluwa mi mnóstwo błędów z pliku RPRuntime.h, niestety nie mogę tego wkleić.

DO
  • Rejestracja:ponad 5 lat
  • Ostatnio:4 miesiące
  • Postów:85
1

jak już to:
g++ -o test main.cpp -lRPRuntime

several
  • Rejestracja:prawie 16 lat
  • Ostatnio:4 minuty
1

Jeżeli wszystko masz w jednym katalogu to wtedy tak

Kopiuj
g++ -o test main.cpp -I./ -L./ -l:RPRuntime.lib

-I wskazuje ścieżkę do inkluda
-L wskazuje ścieżkę do bibliotek
-l: wskazuje bibliotekę do zlinkowania

Zauważ, użycie dwukropka w -l:, oznacza to zlinkowanie nazwy biblioteki dokładnie z taką nazwą jaką podasz. -l bez dwukropka rozwija się do libRPRuntime.


edytowany 2x, ostatnio: several
kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:około 4 godziny
  • Lokalizacja:Szczecin
1

Dlaczego nie możesz wkleić? NDA? To zapewne musisz wysupłać kilka dolarów na konsultację specjalisty, bez danych nie jesteśmy w stanie pomóc.


MarekR22
Moderator C/C++
  • Rejestracja:około 17 lat
  • Ostatnio:5 minut
2

Rozszerzenie dll wskazuje na to, że to jest Windows.
Można domyślać się, że biblioteka jest zbudowana za pomocą msvc, ty próbujesz ją dołączyć do czegoś budowanego przez mingw.
AFAIK to nie jest takie proste (oba kompilatory mają różne ABI), możliwe, że nawet sam nagłówek kompiluje się tylko pod msvc.
Dlatego bez dodatkowych informacji to bym radził spróbować z msvc.

Do tego jeszcze pytanie jakiej wersji mingw używasz (jaką ma domyślną wersję C++ włączoną) i jakiego standardu C++ używa ta biblioteka?


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 3x, ostatnio: MarekR22
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 19 godzin
0
MarekR22 napisał(a):

Można domyślać się, że biblioteka jest zbudowana za pomocą msvc, ty próbujesz ją dołączyć do czegoś budowanego przez mingw.
AFAIK to nie jest takie proste (oba kompilatory mają różne ABI), możliwe, że nawet sam nagłówek kompiluje się tylko pod msvc.

ABI w C jest zgodne, wliczając w to funkcje napisane w C++ ale wyeksportowane z extern "C", ale C++ poza tym wyjątkiem zgodny nie jest.

Co jednak z pewnością nie jest zgodne to format biblioteki .lib w MSVC z formatem biblioteki .a w mingwach, nawet jeśli sama DLL-ka używa tylko ABI z C.

Więc jeśli ten RPRuntime.dll jest potencjalnie używalny w C (a to możemy ocenić po wyglądzie nagłówka), to da się tej biblioteki użyć, jednak nie przez wlinkowanie .lib, tylko przez dynamiczne ładowanie DLL-ki (LoadLibrary) albo odtworzenie biblioteki importowej (.lib/.a) we właściwym formacie.

edytowany 5x, ostatnio: Azarien
06
W MinGW można bezpośrednio załączać pliki .dll
cpp_beginer
  • Rejestracja:około 6 lat
  • Ostatnio:ponad 2 lata
  • Postów:105
0

Propozycja @several okazała się poprawna ale jednoczesnie musiałem uzyć nowych plikow .h .lib. dll. Poprzednie zawierały błedy.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.