Неразрешенные внешние элементы со статической библиотекой в ​​Visual Studio (f2c)

Я успешно использовал f2c.exe для преобразования некоторых файлов Fortran * .f в файлы *. c файлы. Я убедился, что #include "f2c.h" существует в каждом файле C, и добавил каталог, содержащий этот заголовочный файл в MS VS2008: Properties -> C/C++ -> General -> Additional Include Directories

Проблема начинается с неразрешенных ошибок внешнего символа, о которых сообщается для всех функций ввода-вывода f2c и математических функций, которые присутствовали в исходных файлах: s_rsue, e_rsue, s_rsfe, do_uio, f_close, do_fio, do_lio, f_open, s_stop, pow, pow_ri, sqrt, log, exp, tanh, cos, acos и т. Д.

Я прочитал здесь, который мне нужно создать файл статической библиотеки vcf2c.lib сначала путем загрузки libf2c. Поэтому я использовал nmake в VS2008 для запуска makefile.vc и произвел vcf2c.lib, которые я затем скопировал в каталог своего проекта и добавил в Configuration Properties -> Linker -> Input -> Additional Dependencies, но я ВСЕ ЕЩЕ получаю те же неразрешенные внешние символы, что и раньше.

Правильно ли я построил эту библиотеку, чтобы Visual Studio распознала в ней функции? Что мне здесь не хватает? Добавление этой библиотеки имело нулевой эффект. Спасибо за любую помощь.

Примеры ошибок:

error LNK2019: unresolved external symbol "long __cdecl e_rsue(void)" (?e_rsue@@YAJXZ) referenced in function _main
error LNK2019: unresolved external symbol "long __cdecl do_uio(long *,char *,long)" (?do_uio@@YAJPAJPADJ@Z) referenced in function _main
error LNK2019: unresolved external symbol "long __cdecl s_rsue(struct cilist *)" (?s_rsue@@YAJPAUcilist@@@Z) referenced in function _main
error LNK2019: unresolved external symbol "double __cdecl log(double)" (?log@@YANN@Z) referenced in function _main
error LNK2019: unresolved external symbol "double __cdecl sqrt(double)" (?sqrt@@YANN@Z) referenced in function "int __cdecl calcfl_(void)" (?calcfl_@@YAHXZ)
error LNK2019: unresolved external symbol "double __cdecl cos(double)" (?cos@@YANN@Z) referenced in function "int __cdecl waveno_(float *,float *)" (?waveno_@@YAHPAM0@Z)

РЕДАКТИРОВАТЬ: Я пытался диагностировать любые проблемы в самом файле библиотеки. Я даже попытался загрузить версия, которая была скомпилирована кем-то другим, но все еще не разрешает внешние факторы. Вот результаты запуска dumpbin:

dumpbin /exports vcf2c.lib

Dump of file vcf2c.lib

File Type: LIBRARY
  Summary
    18A0 .bss
     246 .data
    1110 .debug$F
    513C .debug$S
    1C17 .drectve
     B73 .rdata
    A5BD .text

Хотя я понятия не имею, что это значит. Когда я запускаю его с флагом / ALL, я вижу там нужные имена функций, но опять же, я не уверен, как определить, правильно ли это. Может ли быть какое-то несоответствие между функциями исходного кода и библиотекой? Варианты make-файла 16-битного против 32-битного, C против C ++?


person MasterHD    schedule 11.07.2014    source источник
comment
испытываю здесь ту же проблему! Но сюрприз в том, что я смог скомпилировать 64-битную версию, но не 32-битную версию ..   -  person rampireram    schedule 10.11.2014


Ответы (1)


Это должно быть проблема с соглашением о вызовах! Просто убедитесь, что функции были экспортированы с тем же соглашением о вызовах (_cdecl или _stdcall), иначе используйте то же соглашение о вызовах, которое используется экспортируемыми функциями.

person rampireram    schedule 10.11.2014