Я пытаюсь скомпилировать C-программу с использованием MinGW в Windows 7. Программа использует CBLAS-библиотеку GSL, поэтому, короче говоря, я (пытаюсь) запустить эту команду в терминале (cmd):
gcc MyProgram.c -o MyProgram.exe -O3 -lm -lgsl -lgslcblas
Это приводит к длинной серии сообщений об ошибках вида:
undefined reference to '_imp____infinity'
а также
undefined reference to '_impure_ptr'
из различных GSL-функций. То есть:
/gsl-1.9/specfunc/trig.c:335: undefined reference to '_imp____infinity'
что, похоже, связано с функцией OVERFLOW_ERROR в GSL.
Я скомпилировал GSL из исходников с помощью MSYS (и префиксом configure указал путь к MinGW), но мне кажется, что дело не в привязке к GSL-библиотекам - т.е. функции вроде бы расположены правильно.
Для справки, я могу удалить части программы, основанные на CBLAS (что делает программу несколько бесполезной), и успешно скомпилировать программу, используя:
gcc MyProgram.c -o MyProgram.exe -O3 -lm
где я разместил соответствующие каталоги в PATH.
Я очень озадачен этой неожиданной ошибкой, так как кажется, что ссылка на GSL искажает ссылки на фундаментальные C-библиотеки? Кроме того, программа отлично компилируется в Ubuntu 15.04 (с GSL-флагами).
__infinity
или_impure_ptr
в любую сборку MinGW; возможно ли, что у вас есть загрязнение пула заголовков файлами заголовков Linux (или аналогичными)? Из проверки MinGW<math.h>
я вижу, чтоMSVCRT.DLL
эквивалентомinfinity
является_INF
; MSDN не документируетimpure_ptr
, и я не знаю эквивалентаMSVCRT.DLL
. - person Keith Marshall   schedule 08.07.2015