Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Fortran > [Tools] Подключение библиотеки .lib


Автор: Amalthea 9.11.2010, 15:34
Нужна помощь!

Раньше никогда не сталкивалась с библиотеками .lib, что это такое, как используются и т.д. 

Есть Папка Toolkit с разными процедурами на фортране и другой информацией. В ней есть папка с библиотеками Toolkit/lib/spicelib.lib и support.lib

Я правильно понимаю, для того чтобы воспользоваться этими процедурами необходимо подключить эти библиотеки  spicelib.lib и support.lib ?

Вообще данные были взяты с сайта НАСА. Я туда написала, мне ответили, прислали кучу информации с описанием этих процедур и др. И написали "You will need to link your application to the library SPICELIB (toolkit\lib\spicelib.lib)."

У меня FPS4.0

 smile 

Автор: FCM 9.11.2010, 20:51
Как и объектные файлы, lib файлы нужно линковать (компоновать)  к проекту, в котором используешь их содержимое.

Обычно, если используется IDE,  в свойствах проекта есть опция, где можно указать необходимые (на этапе компоновки) библиотеки.
Еще в линейке Visual Fortran (но не знаю было ли это уже в FPS4) 
- можно явно включить lib-файл в проект (туда где Sources)
- можно воспользоваться директивой !DEC$  OBJCOMMENT LIB : "путь_к_библиотеке"для автоматической линковки стат.библиотеки  (В FPS возможно вместо !DEC надо набирать !MS - точно не помню)

Автор: Amalthea 17.11.2010, 10:42
Пробовала создавать модуль таким образом:
            MODULE mod_spice
            !MS$OBJCOMMENT LIB:"D:\TOOLKIT\LIB\SPICELIB.lib"
            END MODULE mod_spice
Затем подключала этот модуль в основную программу:
    PROGRAM CONVTM
    USE mod_spice
    
            IMPLICIT NONE
            ...
Выдает ошибку: 
            Linking...
            Text1.obj : error LNK2001: unresolved external symbol _FURNSH@8
            Text1.exe : fatal error LNK1120: 1 unresolved externals
            Error executing link.exe.
Сейчас установила IntelFortran 11, попробую в нем поковыряться.

Автор: Amalthea 17.11.2010, 11:46
Воспользовалась советами Cr@$h

1. Можно непосредственно добавить файл *.lib в проект Visual Studio посредством команды Project > Add Existing Item….
2. Можно указать имя библиотеки импорта в опциях линкера. Для этого нужно открыть окно настроек проекта (Project > Properties…) и добавить в поле Aditional Options на вкладке Linker\Command Line имя *.lib.

Выдает ошибку:
           Fatal error LNK1104: cannot open file 'LIBC.lib'

Нашла решение:
           Use the Multi-Thread-Safe version LIBCMT.LIB instead of LIBC.LIB that may fix. 

           1. Go to the Project property page.
           2. Go to Linker on the left tree view panel
           3. Open the Input node
           4. In the "Additional Dependencies" you will find LIBC.lib, replace that with LIBMT.lib 

           Rebuild your project.

Но тоже не помогло. Теперь пишет: 
           Fatal error LNK1181: cannot open file 'LIBMT.lib'

Автор: Amalthea 17.11.2010, 12:07
Попробовала прописать игнор на LIBC.lib, ошибок больше не выдает, но процедуры из этой библиотеки все равно не вызываются. Буду искать дальше ошибки.

Автор: FCM 17.11.2010, 13:30
Цитата(Amalthea @  17.11.2010,  10:42 Найти цитируемый пост)
 Text1.obj : error LNK2001: unresolved external symbol _FURNSH@8


Может не находить процедуру, если разные соглашения о вызове, т.к. от последнего зависит декорация имен при компилировании..
А как выглядит объявление имени FURNSH и обращение к нему ?

Автор: Amalthea 23.11.2010, 09:30
CHARACTER*(*)         METAKR
PARAMETER           ( METAKR = 'convtm.tm' )

CALL FURNSH ( METAKR )

----------------------------
файл: convtm.tm содержит

         \begindata
         KERNELS_TO_LOAD = ( 'kernels/lsk/naif0008.tls',
                                              'kernels/sclk/cas00084.tsc' )
         \begintext

Автор: Amalthea 23.11.2010, 10:43
Проблема решена!
Решила запускать программу через FAR.
Библиотеки подключала следующим образом:
     !MS$OBJCOMMENT LIB:"D:\TOOLKIT\LIB\SPICELIB.lib"
А в файле ifortvars_ia32.bat
     C:\ProgramsFiles\Intel\Compiler\11.0\066\fortran\Bin\IA32\ifortvars_ia32.bat
в конце файла добавила такой код:
     @if exist %1.exe del %1.exe.bat
     ifort.exe /4Yportlib /w /Ox /real-size:64 /free %1.f >%1.log
     @if exist %1.exe del %1.obj
     @if exist %1.exe del %1.log
     @if exist %1.exe %1.exe
И все заработало!

Автор: FCM 23.11.2010, 12:59
Наверное нет никаких противопоказаний, чтобы и через IDE заработало.

Автор: Amalthea 24.11.2010, 09:39
Возможно и нет противопоказаний, но у меня не получилось и специалистов вокруг нет. 
FAR меня устраивает. 
Считаю, что тему можно закрыть  smile 

Автор: FCM 24.11.2010, 11:21
Цитата(Amalthea @  24.11.2010,  09:39 Найти цитируемый пост)
Считаю, что тему можно закрыть  smile  

Для этого у автора темы в ее начале доступна опция "пометить как решенный".

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)