Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Tools] как подключить библиотеку? 
:(
    Опции темы
Aprol
Дата 16.2.2009, 08:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 259
Регистрация: 15.6.2007

Репутация: нет
Всего: нет



Есть скомпилированная библиотека Big.lib.
Как её подключить к компилируемой программе test.for
компилятор gfortran
PM MAIL   Вверх
Cr@$h
Дата 16.2.2009, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
***


Профиль
Группа: Участник Клуба
Сообщений: 1693
Регистрация: 3.4.2005
Где: Санкт-Петербург, Россия

Репутация: 1
Всего: 41



Попробуй при компоновке добавить ключ:
Код

-l Big
(-L Big)

или
Код

-l Big.lib
(-l Big.lib)

PM MAIL ICQ   Вверх
Aprol
Дата 18.2.2009, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 259
Регистрация: 15.6.2007

Репутация: нет
Всего: нет



Не выходит.
Есть еще варианты?
PM MAIL   Вверх
Cr@$h
Дата 18.2.2009, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
***


Профиль
Группа: Участник Клуба
Сообщений: 1693
Регистрация: 3.4.2005
Где: Санкт-Петербург, Россия

Репутация: 1
Всего: 41



Напишите ваш скрипт компиляции.
PM MAIL ICQ   Вверх
Aprol
Дата 19.2.2009, 04:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 259
Регистрация: 15.6.2007

Репутация: нет
Всего: нет



>gfortran prog.for (-L Big.lib) -o proga.exe
-------------------
Пробовал все Ваши варианты.
PM MAIL   Вверх
marcusmae
Дата 19.2.2009, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


stravaganza
**


Профиль
Группа: Участник
Сообщений: 874
Регистрация: 26.3.2006

Репутация: нет
Всего: 39



Это - линукс? = Наверно, нужно написать вместе -LBig.lib или же лучше -L$(PWD)/Big.lib, подразумвая, что библиотека лежит в текущей директории. Странное разрешение - lib (не .а), можно увидеть консольный вывод от компиляции библиотеки и откомпиляции основной проги?


--------------------
ἀπὸ μηχανῆς θεός
PM MAIL ICQ GTalk   Вверх
Aprol
Дата 20.2.2009, 04:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 259
Регистрация: 15.6.2007

Репутация: нет
Всего: нет



Нет это винда. Исходников библиотеки у меня нет.
Что только уже не пробывал, даже библу переименовал.
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
PM MAIL   Вверх
marcusmae
Дата 20.2.2009, 09:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


stravaganza
**


Профиль
Группа: Участник
Сообщений: 874
Регистрация: 26.3.2006

Репутация: нет
Всего: 39



Aprol, похоже что библиотека подключается правильно. В таком случае необходимо проверить, есть ли в ней действительно искомый символ, например, он может не иметь заключительного подчерка, т.е. _mi1001 - этим управляет опция компилятора --no-underscoring. Чтобы просматривать содержимое библиотки, нужна какая-нибудь программа-дампер (COFF/PE Dumper) типа dumpbin или в линухе есть аналогичная утилита nm, не уверен, что она портируется на винду вместе с gnu-компиляторами, но почему бы и нет.


--------------------
ἀπὸ μηχανῆς θεός
PM MAIL ICQ GTalk   Вверх
Aprol
Дата 21.2.2009, 05:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 259
Регистрация: 15.6.2007

Репутация: нет
Всего: нет




Цитата(marcusmae @  20.2.2009,  09:10 Найти цитируемый пост)
этим управляет опция компилятора --no-underscoring
 Как её использовать ?

Цитата(marcusmae @  20.2.2009,  09:10 Найти цитируемый пост)
dumpbin

Это так понимаю под винду.
И что мне это даст? Как то изменится вызов в главной программе?
Вызвается  в программе вот так 
      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)
PM MAIL   Вверх
Aprol
Дата 21.2.2009, 06:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 259
Регистрация: 15.6.2007

Репутация: нет
Всего: нет



У иеня есть исходники старой версии этой библы. Так вот компилировал её в 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:31
PM MAIL   Вверх
Aprol
Дата 21.2.2009, 06:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 259
Регистрация: 15.6.2007

Репутация: нет
Всего: нет



А вот нашел:
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
Прочерка в конце нет. А как переделать ?
PM MAIL   Вверх
marcusmae
Дата 21.2.2009, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


stravaganza
**


Профиль
Группа: Участник
Сообщений: 874
Регистрация: 26.3.2006

Репутация: нет
Всего: 39



Цитата(Aprol @  21.2.2009,  06:39 Найти цитируемый пост)
Прочерка в конце нет. А как переделать ?


Указать --no-underscoring в числе опций компилятору, как-то так:

Цитата

>gfortran prog.for --no-underscoring -LBig.lib -o proga.exe


Добавление подчерков используется для предотвращения конфликтов имён. Почитать об этой и других опциях gfortran можно, например, здесь.


--------------------
ἀπὸ μηχανῆς θεός
PM MAIL ICQ GTalk   Вверх
Aprol
Дата 22.2.2009, 05:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 259
Регистрация: 15.6.2007

Репутация: нет
Всего: нет



Та же самая ошибка только теперь  "reference to `_mi1001'".
 smile 
Но она же есть в либе  smile 
Может потому, что в одной библе она объявлена в верхнем регистре, а в другой в нижнем?
Там где работает:
Код

0000579a T _m1_
         U _malloc
00000000 T _mi1001_
0000468e T _nagr_
000037b5 T _napr00_

А там где нет:
Код

0000000 t .text
00000000 A DATA$TIDENT
00000000 T _MI1001
00000000 T _MI1001@108
00000008 C _GRAF

Пр  компиляции ищется именно _mi1001
___________________
Вроде за это отвечает опция -fcase-lower
Но он говорит такого ключа нет

Это сообщение отредактировал(а) Aprol - 22.2.2009, 05:14
PM MAIL   Вверх
marcusmae
Дата 22.2.2009, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


stravaganza
**


Профиль
Группа: Участник
Сообщений: 874
Регистрация: 26.3.2006

Репутация: нет
Всего: 39



Выглядит так будто разные версии библиотеки собираются с разными опциями или разными компиляторами. Можно попробовать дать алиас к имени:

Код

SUBROUTINE MY_SUB (I)
    !DEC$ ATTRIBUTES C, ALIAS:'My_Sub_' :: MY_SUB ! ia32 systems
    INTEGER I
END SUBROUTINE MY_SUB


но это не очень хорошо


--------------------
ἀπὸ μηχανῆς θεός
PM MAIL ICQ GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Fortran | Следующая тема »


 




[ Время генерации скрипта: 0.1549 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.