[g++] kompilacja .lib

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ć.

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ć.

1

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

1

Jeżeli wszystko masz w jednym katalogu to wtedy tak

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.

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.

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?

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.

0

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

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