Instalacja biblioteki GMP w śrdiwisku VC++

0

Witam, otóż spotkałem się z pewnym problemem którego póki co własnymi siłami rozwiązać nie potrafię.

Chodzi o bibliotekę GMP. Ściągnąłem ją ze strony twórców(http://gmplib.org/) i zacząłem próby jej instalacji w środowisku Visual C++ 2010, bo gdzieś wyczytałem że bibliotekę trzeba skompilować, z tym że nigdy wcześniej nie miałem z tym do czynienia :P. Oczywiście najpierw zajrzałem do dokumentacji i ucieszony otworzyłem zakładkę install. Tam znalazłem opis:

GMP has an autoconf/automake/libtool based configuration system. On a Unix-like system a basic build can be done with
./configure
make
Some self-tests can be run with
make check
And you can install (under /usr/local by default) with
make install

Niestety mój system nie jest "Unix-like" więc na nic mi się to nie zdało.

No więc kolejny krok - zapytanie do wujka Google, który na ten temat praktycznie żadnych informacji nie posiadał, z bardziej sensownych materiałów znalazłem to:

  1. Download latest GMP and unzip to ${gmp_build}
    2. Copy all files under patches/4.1-static (or patches/4.1-dynamic for building DLL) to ${gmp_build}
    3. Open gmp.dsw (gmp.vcproj for VC++.Net) to build GMP
    4. After building, you can use gmp.h, lib/gmp.lib, lib/gmpDebug.lib to build your GMP application. (If you build GMP DLL, then you need gmp.dll or gmpDebug.dll for runing your application.)

Enjoy!

Problemem jest punkt 3, nigdzie nie doszukałem się pliku o nazwie gmp.dsw lub gmp.vcproj

Więc postanowiłem go ominąć i zrobiłem tak: skopiowałem pliki nagłówkowe do odpowiedniego folderu, następnie pliki .lib.
Uruchomiłem VC++, wszedłem w opcje projektu, w zakładce linker w polu "additional dependencies" dopisałem gmp.lib i gmpDebug.libi spróbowałem skompilować przykładowy program.
niby wszystko ok, ale wyświetliło błąd linkera:

1>LINK : fatal error LNK1104: cannot open file 'LIBC.lib'

Tym razem, wszedłem w opcje linkera i w polu "Ignore Specific Default Libraries" dopisałem LIC.lib, ale przy próbie ponownej kompilacji ujrzałem taką oto litanię:

1>gmp.lib(scanf.obj) : error LNK2019: unresolved external symbol __iob referenced in function ___gmp_scanf
1>gmp.lib(memory.obj) : error LNK2001: unresolved external symbol __iob
1>gmp.lib(assert.obj) : error LNK2001: unresolved external symbol __iob
1>gmp.lib(doscan.obj) : error LNK2019: unresolved external symbol __pctype referenced in function ___gmp_doscan
1>gmp.lib(set_str.obj) : error LNK2001: unresolved external symbol __pctype
1>gmp.lib(set_str.obj) : error LNK2001: unresolved external symbol __pctype
1>gmp.lib(doscan.obj) : error LNK2019: unresolved external symbol ___mb_cur_max referenced in function ___gmp_doscan
1>gmp.lib(set_str.obj) : error LNK2001: unresolved external symbol ___mb_cur_max
1>gmp.lib(set_str.obj) : error LNK2001: unresolved external symbol ___mb_cur_max
1>c:\users\komputer\documents\visual studio 2010\Projects\test2\Debug\test2.exe : fatal error LNK1120: 3 unresolved externals

I tutaj się zatrzymałem, więcej pomysłów nie mam. Proszę o wasze sugestie i pomoc. Pozdrawiam

0

Koniecznie potrzebujesz kompilować całą bibliotekę w Visual Studio? Skusisz się może na mingw i msys? Będzie prościej. Nawet nie trzeba samemu kompilować, bo gmp 5.0.1 jest w zestawie. Z pliku dll robimy sobie def, a z niego lib.

Gotowy dll i lib w załączniku.

0

Wkleiłem twojego liba to \lib, dodałem go do rozszerzeń w ustawieniach linkera, walnąłem tego dll'a obok aplikacji wynikowej i generalnie ten sam błąd :/ Nie do końca zrozumiałem Twoje ostatnie zdanie więc stąd zapewne ten kłopot.

0

Nie no, generalnie powinno działać. Upewnij się jeszcze raz, że ścieżka do tego liba jest poprawna i nie linkujesz tego poprzedniego. Mi testowy program z wykorzystaniem jakiejś funkcji gmp kompiluje się prawidłowo.

0

Ja tam w archiwum z najnowszą wersją nie widzę żandego "patches" więc... Pewnie na stronie na której masz tę instrukcję jest jeszcze link do ściągnięcia z plikiem projektu pod VC.

Pod MSYS/MinGW spokojnie mi się kompilowało GMP. ;)

0

GMP nie za bardzo lubi Windozę. Jak chcesz BigNumy to może MPFR lub MPIR?

0

Teraz zostało tylko:
1>LINK : error LNK2001: unresolved external symbol _WinMainCRTStartup

Jakiś czas temu się skompilowało ale po restarcie visuala już nie :P

0

Można powiedzieć że działa. Po uruchomieniu jakiegoś programu wyskakuje okienko z błędem:

"Windows has triggered a breakpoint in test3.exe.

This may be due to a corruption of the heap, which indicates a bug in test3.exe or any of the DLLs it has loaded.

This may also be due to the user pressing F12 while test3.exe has focus.

The output window may have more diagnostic information."

Przy następnej próbie uruchomienia pokazuje że "sterta została uszkodzona".

Ewentualnie access violation :P

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