Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Fortran > [Tools] как подключить библиотеку? |
Автор: Aprol 16.2.2009, 08:20 |
Есть скомпилированная библиотека Big.lib. Как её подключить к компилируемой программе test.for компилятор gfortran |
Автор: Cr@$h 16.2.2009, 17:30 | ||||
Попробуй при компоновке добавить ключ:
или
|
Автор: Aprol 18.2.2009, 13:12 |
Не выходит. Есть еще варианты? |
Автор: Cr@$h 18.2.2009, 16:24 |
Напишите ваш скрипт компиляции. |
Автор: Aprol 19.2.2009, 04:42 |
>gfortran prog.for (-L Big.lib) -o proga.exe ------------------- Пробовал все Ваши варианты. |
Автор: marcusmae 19.2.2009, 23:33 |
Это - линукс? = Наверно, нужно написать вместе -LBig.lib или же лучше -L$(PWD)/Big.lib, подразумвая, что библиотека лежит в текущей директории. Странное разрешение - lib (не .а), можно увидеть консольный вывод от компиляции библиотеки и откомпиляции основной проги? |
Автор: Aprol 20.2.2009, 04:50 |
Нет это винда. Исходников библиотеки у меня нет. Что только уже не пробывал, даже библу переименовал. D:\...ерситет\ДИПЛОМ\наработки\TnewLIB>gfortran test_rw.for -LTident.lib D:\DOCUME~1\Anton\LOCALS~1\Temp/cc40EEUW.o:test_rw.for:(.text+0x1b71): undefined reference to `_mi1001_' collect2: ld returned 1 exit status Запускал по другому, думал сначала нужно подсунуть библу. D:\...ерситет\ДИПЛОМ\наработки\TnewLIB>gfortran -LTident.lib test_rw.for D:\DOCUME~1\Anton\LOCALS~1\Temp/ccMYwGcF.o:test_rw.for:(.text+0x1b71): undefined reference to `_mi1001_' collect2: ld returned 1 exit status |
Автор: marcusmae 20.2.2009, 09:10 |
Aprol, похоже что библиотека подключается правильно. В таком случае необходимо проверить, есть ли в ней действительно искомый символ, например, он может не иметь заключительного подчерка, т.е. _mi1001 - этим управляет опция компилятора --no-underscoring. Чтобы просматривать содержимое библиотки, нужна какая-нибудь программа-дампер (COFF/PE Dumper) типа dumpbin или в линухе есть аналогичная утилита nm, не уверен, что она портируется на винду вместе с gnu-компиляторами, но почему бы и нет. |
Автор: Aprol 21.2.2009, 05:40 |
Как её использовать ? Это так понимаю под винду. И что мне это даст? Как то изменится вызов в главной программе? Вызвается в программе вот так CALL MI1001(TN,TK,N,M,N1,K,NI,T0L,H1,ALFH,AA,XHI,BET,NKP, *GAM,NKG,ITER,IPR1,IPR2,IPR3,IALF,XXI,XXIK,UU,EPS,PR,MET) |
Автор: Aprol 21.2.2009, 06:14 |
У иеня есть исходники старой версии этой библы. Так вот компилировал её в TIdent.o Через nm получил список процедур: среди них есть нужная 000214b4 T _hxxp_ 00010a90 T _inpl1_ 00010db1 T _inpls1_ 00023b0b T _iswri_ 0000579a T _m1_ U _malloc 00000000 T _mi1001_ 0000468e T _nagr_ 000037b5 T _napr00_ 00012bf8 T _napr02_ 000062d2 T _napr11_ 00007801 T _napr1m_ 000156db T _napr2m_ 0001844d T _nim_ Ну со старой, то все работает. Когда натравляю на новую TIdent.lib: >nm TIdent.lib U _for_deallocate U _for_deallocate U _for_deallocate U _for_deallocate U _for_deallocate U _for_deallocate U _for_deallocate U _for_deallocate U _for_deallocate U _for_deallocate U _for_deallocate U _for_deallocate U _for_deallocate U _for_deallocate U _for_deallocate U _for_write_seq_fmt U _for_write_seq_fmt_xmit И как то криво все работает |
Автор: Aprol 21.2.2009, 06:39 |
А вот нашел: 00000000 N .debug$T 00000000 i .drectve 00000000 t .text 00000000 A DATA$TIDENT 00000000 T _MI1001 00000000 T _MI1001@108 00000008 C _GRAF 00000014 C _DIMEN 00000018 C _ATIN 00001512 T _DXDA 00001512 T _DXDA@12 00001644 T _POBD 00001644 T _POBD@112 000027ae T _TUNER 000027ae T _TUNER@16 00002870 D _RE 00002890 D _ATUN 00002e9f T _NAPR00 Прочерка в конце нет. А как переделать ? |
Автор: marcusmae 21.2.2009, 14:00 | ||
Указать --no-underscoring в числе опций компилятору, как-то так:
Добавление подчерков используется для предотвращения конфликтов имён. Почитать об этой и других опциях gfortran можно, например, http://www.linuxmanpages.com/man1/gfortran.1.php. |
Автор: Aprol 22.2.2009, 05:10 | ||||
Та же самая ошибка только теперь "reference to `_mi1001'".![]() Но она же есть в либе ![]() Может потому, что в одной библе она объявлена в верхнем регистре, а в другой в нижнем? Там где работает:
А там где нет:
Пр компиляции ищется именно _mi1001 ___________________ Вроде за это отвечает опция -fcase-lower Но он говорит такого ключа нет |
Автор: marcusmae 22.2.2009, 14:44 | ||
Выглядит так будто разные версии библиотеки собираются с разными опциями или разными компиляторами. Можно попробовать дать http://www.ncsa.uiuc.edu/UserInfo/Resources/Software/Intel/Compilers/8.1/f_ug1/pgwadjat.htm к имени:
но это не очень хорошо |