Неразрешенные внешние объекты со статической библиотекой в 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 /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, я вижу там нужные имена функций, но опять же, я не уверен, как определить, правильно ли это. Может ли быть какое-то несоответствие между функциями исходного кода и библиотекой? 16-битные или 32-битные, C и C++ опции makefile?
1 ответ
Должно быть проблема с соглашением о вызовах! Просто убедитесь, что функции были экспортированы с тем же соглашением о вызовах (_cdecl или _stdcall), либо используйте то же соглашение о вызовах, что и экспортируемые функции.