W jaki sposób dodać biblioteki gmpxx.h do projektu?

0
#include <gmpxx.h> # w tej lini programu jest juz error.
...Users\linex\Documents\rsa.cpp	[Error] gmpxx.h: No such file or directory

Witam serdecznie szanowni koledzy i koleżanki,

jak w temacie - nie umiem tak tego ułożyć żeby cokolwiek działało, biblioteki ściągnięte jednak to koniec przygody. Proszę w miarę możliwości o wyczerpującą pomoc.
Biblioteki nie zainstalowane, dyrektywy dla kompilatora do tego nie doszedłem.

Od technicznej strony to wygląda tak:
Win11
embarcadero dev c++ 6.3,
biblioteki ściągnięte, wypakowane, https://gmplib.org/#DOWNLOAD,
gmpxx.h albo gmp.h nie ustaliłem takich plików

Potrzebuje wykonać operacje na liczbach pierwszych, jak na razie z powodzeniem ale nie mogą być dłuższe niż 5 cyfr, tak to porażka
Dziękuje za wszelką pomoc oraz za każdy przesłany post, odpowiedz...Pozdrawiam J

1

Jak to robisz tak chaotycznie, jak piszesz, to trudno widzieć jakieś szanse.

Robiłeś / zestawiałeś choć raz w życiu większy projekt w C/C++ ? Ustalenie problemów ścieżki pliku includowanego to podstawa
Bo jak jesteś zielonym szczypiorkiem, to powiedzmy sobie, zadanie przerosło możliwości, i nikt ci w jednym poście nie nadrobi braków podstaw.

Uzycie egzotycznego kompilatora to proszenie się o dodatkowe kłopoty / brak wsparcia

straciłem na to już tyle czasu ze nikt i nigdy mi tego nie wynagrodzi....

Popłakałem się, biedactwo ...

Potrzebuje wykonać operacje na liczbach pierwszych, jak na razie z powodzeniem ale nie mogą być dłuższe niż 5 cyfr, tak to porażka

O czym mówisz ???

1

ps. my programiści jesteśmy szczególnie jadowici, jak ktoś przychodzi ze słowami
nie działa nic...

1

Czytając ten post czuję, jakby ktoś rzucał mi w mordę losowe słowa i nie dawał chwili wytchnienia.

Zacznijmy od początku, dlaczego używasz jakichś dziwnych narzędzi zamiast VS Studio np., skoro piszesz na Windowsie?

0
Eldorad O. napisał(a):

Czytając ten post czuję, jakby ktoś rzucał mi w mordę losowe słowa i nie dawał chwili wytchnienia.

Ale się czepiasz, przynajmniej nie wklejka z ChaGPT

0

spróbuj dosłownie zmienić #include <gmpxx.h> na #include "gmpxx.h", jeśli nie działa to pogrzeb w bibliotece i sprawdź gdzie są pliki nagłówkowe. Głupie bardzo ale tylko to mi do głowy przychodzi z błędów które mi się pojawiały. Jak masz problem z dodawaniem bibliotek to fajną opcją jest Visual Studio w którym część bibliotek jest udostępniona w ramach NuGet, jedno kliknięcie i masz

0

@ZrobieDobrze do tego jeszcze nie dotarliśmy :D

0

Witam kolegów, za wszystkie uwagi dziękuje,
Padlo pytanie cytuje: "Potrzebuje wykonać operacje na liczbach pierwszych, jak na razie z powodzeniem ale nie mogą być dłuższe niż 5 cyfr, tak to porażka
O czym mówisz ???" - mowie o RSA, szyfrowanie, ale powoli trace wiarę ze kiedykolwiek zaszyfruje cos tak że nikt nie rozszyfruje....

  1. w bibliotece ile bym nie szukał tzn. już przeszukałem, nie znalazłem plików nagłówkowych, może ktoś może coś podpowiedzieć jakaś ścieżka od pliku czy, ta biblioteka z linku w temacie pod windą się nie instaluje, wyłącznie po linuxem....
  2. Gdzie biblioteki umieścić to również przeszukałem, znalazłem ale nie mam czego tam dokopiować nie wiem co przekopiować i precyzyjnie gdzie....
  3. Dyrektywy dla kompilatora dopisze ale tymczasem biblioteki nie działają, błąd w pierwszej linii C:...\Documents\rsa.cpp [Error] gmpxx.h: No such file or directory
  4. #include <gmpxx.h> na #include "gmpxx.h" to trywialny błąd, oczywiście nie działa bo bibliotek brakuje, ale sprawdziłem....
    Pozdrawiam i dziękuje za dalsze uwagi i porady....
1

na twoim miejscu po ściągnięciu to bym zaczął od lektury pliku README z naciskiem na słowo install.
Ty tych bibliotek nawet nie zbudowałeś.....
edit:
moja rada może zamiast c++ to gnu octave albo scilab?

3

A to koniecznie musi byc embarcadero dev c++ 6.3 ?

Nie lepiej uzyć clang/gcc z msys2 https://www.msys2.org/ ?
GMP już tam jest jako pakiet do zainstalowania https://packages.msys2.org/base/mingw-w64-gmp
A jak che sie samemu skompilować to tez nie ma problemu

I jest jeszcze jeden bonus: Przynajmniej kompilatory będą z głównego nurtu a nie jakieś boczne odnogi ;)

0

@JancioWodnik:

JancioWodnik napisał(a):

Witam kolegów, za wszystkie uwagi dziękuje,
Padlo pytanie cytuje: "Potrzebuje wykonać operacje na liczbach pierwszych, jak na razie z powodzeniem ale nie mogą być dłuższe niż 5 cyfr, tak to porażka
O czym mówisz ???" - mowie o RSA, szyfrowanie, ale powoli trace wiarę ze kiedykolwiek zaszyfruje cos tak że nikt nie rozszyfruje....
Pozdrawiam i dziękuje za dalsze uwagi i porady....

Masz plik 5 megabajtowy, pierwszy znak na początku pliku, przechodzi w znak na końcu, ten z końca na początek. 8 bajtów * 1024 * 1024 (coś tam coś tam). Kolejne znaki zmieniają położenie podobnie. Myślisz, że istnieje technologia która to zdeszyfruje? Odpowiednie zastosowanie tych dostępnych da wszystkie rozwiązania jakich się oczekuje.

Co do poprzedniego posta, używałem Dev c++ , jest ok, małe bóle z Gdi+(jak się marzy o antyalisngu).

2

Na stronie projektu biblioteka jest tylko w postaci źródłowej https://gmplib.org/download/gmp/gmp-6.2.1.tar.lz

Trzeba to ściągnąć, rozpakować a następnie skompilować. Konfigurator jaki został użyty to Autotools więc trzeba uruchomić skrypt ./configure, który wygeneruje plik Makefile oraz inne pliki, których szablony są w plikach o rozszerzeniu *.in. Jest tam gmp-h.in, z którego powstanie właśnie gmp.h. Poniżej różnica między tymi dwoma plikami

/tmp/gmp-6.2.1 λ ./configure --enable-cxx
...
/tmp/gmp-6.2.1 λ diff gmp-h.in gmp.h
41,44c41,44
< #define __GMP_HAVE_HOST_CPU_FAMILY_power   @HAVE_HOST_CPU_FAMILY_power@
< #define __GMP_HAVE_HOST_CPU_FAMILY_powerpc @HAVE_HOST_CPU_FAMILY_powerpc@
< #define GMP_LIMB_BITS                      @GMP_LIMB_BITS@
< #define GMP_NAIL_BITS                      @GMP_NAIL_BITS@
---
> #define __GMP_HAVE_HOST_CPU_FAMILY_power   0
> #define __GMP_HAVE_HOST_CPU_FAMILY_powerpc 0
> #define GMP_LIMB_BITS                      64
> #define GMP_NAIL_BITS                      0
60,61c60,61
< @DEFN_LONG_LONG_LIMB@
< #define __GMP_LIBGMP_DLL  @LIBGMP_DLL@
---
> #define _LONG_LONG_LIMB 1
> #define __GMP_LIBGMP_DLL  0
2326,2327c2326,2327
< #define __GMP_CC "@CC@"
< #define __GMP_CFLAGS "@CFLAGS@"
---
> #define __GMP_CC "gcc"
> #define __GMP_CFLAGS "-O2 -pedantic -fomit-frame-pointer -m64 -mtune=k8 -march=k8"

Żeby sobie zaoszczędzić tego bólu użyj MSYS2 o czym wspomniał @Marius.Maximus. W konsoli np. MSYS2 UCRT64 Shell wystarczy uruchomić pacman -S mingw-w64-ucrt-x86_64-gmp i w katalogu /ucrt64/include powinien się znaleźć plik gmp.h. Oczywiście IDE DevC++ trzeba przestawić na inny toolchain, na ten pochodzący z MSYS2, czyli ustawić ścieżki do gcc, cpp, itp. na C:/msys64/ucrt64/bin.

Zaleta jest taka, że masz najnowszy gcc-13.1.0, a w DevC++ masz staroć gcc-9.2.0. Przy pomocy programu pacman możesz w łatwy i szybki sposób instalować inne popularne biblioteki np. SDL2, SFML, glfw3, Vulkak, fftw3, Qt, wxWidgets, itp. Bibliotek jest setki a może i tysiące.

1
Marius.Maximus napisał(a):

A to koniecznie musi byc embarcadero dev c++ 6.3 ?

Nie lepiej uzyć clang/gcc z msys2 https://www.msys2.org/ ?
GMP już tam jest jako pakiet do zainstalowania https://packages.msys2.org/base/mingw-w64-gmp
A jak che sie samemu skompilować to tez nie ma problemu

I jest jeszcze jeden bonus: Przynajmniej kompilatory będą z głównego nurtu a nie jakieś boczne odnogi ;)

Witam Marius.Maximus, tak to będzie jedyne rozsądne wyjście z tej sytuacji chociaż może to głupio i nieoryginalnie zabrzmi ale embarcadero jest naprawdę świetny tylko te biblioteki, do dziś tylko z gmp mam problem, kompilator w embarcadero to tdm-gcc 9.2.0 64bit. Muszę zaznaczyć ze próbowałem sil z msys2, nie wiem co poszło nie tak, ale nie używam. W wolnej chwili powalczę z msys2 jeszcze.
Pozdrawiam użytkowników....

1

./configure to jest skrypt basha, działa z palca po Linuxem i w MSYS2 lub Cygwin po Windowsem. To się przydaje jak chcesz zbudować paczkę ze źródeł. Lepiej i łatwiej w MSYS2 zainstalować gotową paczkę pacmanem, albo szukaj w necie binarnej paczki dla gcc.

Na stronie https://packages.msys2.org/base/mingw-w64-gmp jest sekcja Binary Packages. Wybierz mingw-w64-x86_64-gmp dla środowiska MINGW64 albo mingw-w64-ucrt-x86_64-gmp dla UCRT64. Tam będzie link do pliku *-x86_64-gmp-6.2.1-5-any.pkg.tar.zst.zstd, który to zawiera:

mingw64|ucrt64/
├── bin
│   ├── libgmp-10.dll
│   └── libgmpxx-4.dll
├── include
│   ├── gmp.h
│   └── gmpxx.h
├── lib
│   ├── libgmp.a
│   ├── libgmp.dll.a
│   ├── libgmpxx.a
│   ├── libgmpxx.dll.a
│   └── pkgconfig
│       ├── gmp.pc
│       └── gmpxx.pc
└── share
    └── info
        ├── gmp.info.gz
        ├── gmp.info-1.gz
        └── gmp.info-2.gz

czyli wszystko co potrzebujesz. Warto sprawdzić czy to pójdzie z gcc dołączonym do DevC++. Jeżeli nie to zainstaluj MSYS2 i w nim gmp, i ustaw na to toolchain w IDE.

1

@jvoytech jestem odrobinę sceptyczny do pomysłu aby polecać metodę z rozpakowaniem paczki w takim przypadku jak tutaj,
jest duża szansa że DLL bedzie potrzebować kolejne DLL itd... itd... nagle sie okaże że trzeba dodać 20 plików
Aczkolwiek jakaś nadzieje jest

@JancioWodnik o gustach sie nie dyskutuje, mi te IDE dev c++ 6.3 przypomina czasy z przełomu wieku, ale z racji że mam projekty dla których ide to notepad++ to rozumiem :D ,
Mi z Embarcadero bardzo podpasowało Delphi (najlepszy RAD jaki widziałem) ale niestety obecnie nasze drobi się rozeszły :(

Co do MSYS2 to musisz zwrócić uwagę że po zainstalowaniu masz kilka środowisk:
Musisz jedno wybrać !!! zrozumieć czym się różnią na początek moze byc "MSYS2 MinGW x64"

screenshot-20230608182033.png

Nie musisz budować uruchamiać ./configure jeżeli użyjesz MSYS2

  1. Wchodzisz na strone pakietu https://packages.msys2.org/base/mingw-w64-gmp

  2. Wybierasz wersję mingw-w64-x86_64-gmp
    screenshot-20230608183953.png

  3. Kopiuj do schowka
    screenshot-20230608184208.png

  4. Wklej do "MSYS2 MinGW x64"

  5. A potem tylko w dev c++ 6.3 dodajesz kompilator gcc z folderu C:\msys64\mingw64

A jak juz koniecznie chesz budować :

I) Uruchamiasz np. "MSYS2 MinGW x64"
II) warto na początek zainstalować kilka przydatnych narzędzi pacman -S mc p7zip zip unrar git pactoys wget
III) wget https://gmplib.org/download/gmp/gmp-6.2.1.tar.xz
IIII) tar -xvf gmp-6.2.1.tar.xz
IIIII) cd gmp-6.2.1
IIIIII) ./configure ....

1
Marius.Maximus napisał(a):

@jvoytech jestem odrobinę sceptyczny do pomysłu aby polecać metodę z rozpakowaniem paczki w takim przypadku jak tutaj,
jest duża szansa że DLL bedzie potrzebować kolejne DLL itd... itd... nagle sie okaże że trzeba dodać 20 plików
Aczkolwiek jakaś nadzieje jest

Warto spróbować a nuż zadziała bez żadnych problemów. Polecenie ldd dla biblioteki libgmp-10.dll i libgmpxx-4.dll pokazuje coś takiego:

~$ ldd /ucrt64/bin/libgmp-10.dll
        ntdll.dll => /c/WINDOWS/SYSTEM32/ntdll.dll (0x7fff7e6f0000)
        KERNEL32.DLL => /c/WINDOWS/System32/KERNEL32.DLL (0x7fff7c9c0000)
        KERNELBASE.dll => /c/WINDOWS/System32/KERNELBASE.dll (0x7fff7c390000)
        msvcrt.dll => /c/WINDOWS/System32/msvcrt.dll (0x7fff7e1a0000)
        ucrtbase.dll => /c/WINDOWS/System32/ucrtbase.dll (0x7fff7c1e0000)
        advapi32.dll => /c/WINDOWS/System32/advapi32.dll (0x7fff7c910000)
        sechost.dll => /c/WINDOWS/System32/sechost.dll (0x7fff7e100000)
        RPCRT4.dll => /c/WINDOWS/System32/RPCRT4.dll (0x7fff7d9d0000)
        CRYPTBASE.DLL => /c/WINDOWS/SYSTEM32/CRYPTBASE.DLL (0x7fff7b7a0000)
        bcryptPrimitives.dll => /c/WINDOWS/System32/bcryptPrimitives.dll (0x7fff7c690000)
~$ ldd /ucrt64/bin/libgmpxx-4.dll
        ntdll.dll => /c/WINDOWS/SYSTEM32/ntdll.dll (0x7fff7e6f0000)
        KERNEL32.DLL => /c/WINDOWS/System32/KERNEL32.DLL (0x7fff7c9c0000)
        KERNELBASE.dll => /c/WINDOWS/System32/KERNELBASE.dll (0x7fff7c390000)
        msvcrt.dll => /c/WINDOWS/System32/msvcrt.dll (0x7fff7e1a0000)
        ucrtbase.dll => /c/WINDOWS/System32/ucrtbase.dll (0x7fff7c1e0000)
        libgmp-10.dll => /ucrt64/bin/libgmp-10.dll (0x7fff60ff0000)
        libstdc++-6.dll => /ucrt64/bin/libstdc++-6.dll (0x7fff3e500000)
        libgcc_s_seh-1.dll => /ucrt64/bin/libgcc_s_seh-1.dll (0x7fff74f30000)
        libwinpthread-1.dll => /ucrt64/bin/libwinpthread-1.dll (0x7fff76c30000)
        libwinpthread-1.dll => /ucrt64/bin/libwinpthread-1.dll (0x1fe9a540000)
        advapi32.dll => /c/WINDOWS/System32/advapi32.dll (0x7fff7c910000)
        sechost.dll => /c/WINDOWS/System32/sechost.dll (0x7fff7e100000)
        RPCRT4.dll => /c/WINDOWS/System32/RPCRT4.dll (0x7fff7d9d0000)
        CRYPTBASE.DLL => /c/WINDOWS/SYSTEM32/CRYPTBASE.DLL (0x7fff7b7a0000)
        bcryptPrimitives.dll => /c/WINDOWS/System32/bcryptPrimitives.dll (0x7fff7c690000)

czyli libgmp-10.dll zależy tylko od systemowych, natomiast libgmpxx-4.dll dodatkowo od kilku bibliotek pochodzących z toolchaina GCC oraz libwinpthread

2

Wyniki są takie, msys2 ucrt64 tam komplet wszystkich plików zainstalowanych przez msys2, gcc.exe, cmake.exe, gdb.exe, widres.exe, g++.exe, wszystko w katalogu ucrt64, wszystkie ścieżki ustawione, dyrektywa dla kompilatora -lgmp.......Ruszyło!!!!
P.S. Brakowało ptaszka przy dyrektywie dla kompilatora....Za wszystkie uwagi dziękuje są super!!! Wynik dzialania programu: Wynik mnożenia: 12186984
Szczególnie dziękuje: @jvoytech oraz Marius.Maximus

Program testowy:

#include <iostream>
#include <gmp.h>
#include <gmpxx.h>
int main() {
    mpz_t x, y, result;
    mpz_init(x);
    mpz_init(y);
    mpz_init(result);

    // Przykładowe liczby do pomnożenia
    mpz_set_str(x, "1234", 10);
    mpz_set_str(y, "9876", 10);

    // Mnożenie dwóch liczb
    mpz_mul(result, x, y);

    // Wyświetlanie wyniku
    std::cout << "Wynik mnożenia: ";
    mpz_out_str(stdout, 10, result);
    std::cout << std::endl;

    // Zwolnienie pamięci
    mpz_clear(x);
    mpz_clear(y);
    mpz_clear(result);
system("pause");
    return 0;
1

Oto prawidłowa dyrektywa dla kompilatora: -lgmp -lgmpxx

1

To jak zmieniłeś kompilator to może warto iść za ciosem i jakieś IDE AD 2023 ?

0
Marius.Maximus napisał(a):

To jak zmieniłeś kompilator to może warto iść za ciosem i jakieś IDE AD 2023 ?

Witam ponownie, skoro padło NOWE IDE, proszę o trzy propozycje z małym opisem, gdzie pobrać, zalety, wady etc. Za info podziękowania z góry...

0

potrzeba pierwszego rzędu to IDE które poprawnie współpracuje z cmake,
wszelkiej maści narzędzia gdzie trzeba wejść w jakieś ustawienia i poustawiać wszystko klik klik wydajają mi dziwne.
(Z perspektywy osoby która wiele lat ożywała Delphi i tam wszystko było klik klik :D )

Pierwsze IDE:taki zestaw :
na windows: msys2, clang64, ninja, cmake, vscode
na linux: clang, ninja, cmake, vscode

Drugie IDE to QtCreator ale tylko dlatego że czasami wole wyklinać plik UI niż wpisać z palca GUI (co prawda koło Delphi to nawet nie leżało ale trochę przypomina koncept i daje szanse dla tej koncepcji)

Trzecie IDE: notepad++

Testowałem:
-- Eclipse , strasznie długo sie uruchamia i mam wrażenie że jest wolne, trudna konfiguracja , albo nie miałem pod ręką osoby która by mnie wprowadziła w arkana używania
-- Code::Blocks miałem wrażenie że to jakiś stary produkt i mnie odepchnął wizualnie
-- CLion strasznie skomplikowany dla mnie albo za szybko sie zniechęciłem bo już byłem napalony na vscode i stwierdziłem że nie ma co szukać dalej (ale podobno bardzo dobre IDE wiele osób chwali)

0

Witam użytkowników, embarcadero dev wygląda tak:![screenshot-20230611171608.png] (https://4programmers.net/uploads/118982/ufZC4h9WGp8ReVN0zoeQfuyq31RGbvZbTPj1wM4o.png)
zaprawdę powiadam Wam, ja nie potrafię się przyczepić, ale jeżeli są ciekawsze rozwiązania czekam z niecierpliwością na propozycje!!!
Z pozdrowieniami
J

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