Ошибка Linkink Фортран в C ++ с Visual Studio 2010 при создании .lib - PullRequest
0 голосов
/ 28 мая 2019

У меня есть некоторый устаревший код, написанный на FORTRAN77, который я пытаюсь использовать повторно в приложении модера на C ++, однако при компиляции моего полного приложения я получаю ошибку компоновки.

Чтобы приступить к компиляции, я использую два следующих скрипта:

Скрипт для компиляции Фортрана с Intel Fortran 11:

CALL "C:\Program Files (x86)\Intel\Compiler\11.1\038\bin\ifortvars.bat" ia32
set myFilesToCompile=file1.for file2.f ....
ifort /c /libs:dll /threads /nologo /iface:cvf %myFilesToCompile%

Скрипт для связи и создания .lib с VC2010:

CALL "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"
set myFilesToCompile=file1.obj file2.obj ...
link.exe -lib /nologo /nodefaultlib:dfor /nodefaultlib:msvcrtd %myFilesToCompile% /out:myLib.lib

Как только я перенесу myLib.lib в мое новое приложение и скомпилирую его (я не могу изменить параметры компиляции, поскольку они исправлены, вызываемый компилятор, конечно, VC2010):

cl.exe  /nologo /MD /w /GR /EHa /F2000000 /Od /fp:precise /arch:SSE2 /I "C:/myApp/include" /I "D:/myApp/code1"  /D "WIN32"  /D "_AFXEXT" /D "NDEBUG" /D "_AFXDLL" /D "_MBCS" /D "_USRDLL" /D "_ATL_STATIC_REGISTRY" /D "OS_NO_ALLOCATORS" /D "OS_WIN_95" /D "_WINDOWS" /D "_WINDLL" /D "INTEG_DLL_PROJECT_QT" /D "QT_THREAD_SUPPORT" /Fd"D:/myApp/codeFolder" /FD /c /Fo"D:/myApp/code2_win32_vc2010.obj" "D:/myApp/code2.cpp"

link.exe  /dll /nologo /subsystem:console /incremental:no /machine:I386 /STACK:2000000 /MANIFEST /MANIFESTFILE:"someManifest" /nodefaultlib:libcd /nodefaultlib:msvcrtd /nodefaultlib:libc /out:"someDLL" /implib:"someLib" /libpath:"allNeededPathIncludingMyLib"

С этими опциями первые два шага в порядке, но последний показывает сообщение об ошибке

LINK : fatal error LNK1104: cannot open file 'ifconsol.lib'
NMAKE : fatal error U1077: '"C:/Program Files (x86)/Microsoft Visual Studio 10.0/VC/bin\link.exe"' : return code '0x450'

Если я изменю параметры первой компиляции, добавив /libdir:noauto, я получу ошибку:

error LNK2019: unresolved external symbol ___libm_sse2_cbrt in function _myFuncOfFile2
error LNK2019: unresolved external symbol _for_f90_index in function _myFuncOfFile3
error LNK2019: unresolved external symbol _for_cpystr in function _myFuncOfFile4
error LNK2001: unresolved external symbol _for_cpystr
error LNK2019: unresolved external symbol _for_cpstr in function _myFuncOfFile5
NMAKE : fatal error U1077: '"C:/Program Files (x86)/Microsoft Visual Studio 10.0/VC/bin\link.exe"' : return code '0x460'

Что странно, поскольку ни одна из этих функций не определена в исходном коде Фортрана. Я предполагаю, что я делаю что-то не так с первой компиляцией, но я не знаю что. Кроме того, почему в процессе компоновки нет ошибки при создании .lib?

...