Вчера я помогал другу компилировать примеры Java для Intel MKL. У нас были проблемы с "неразрешенными внешними файлами", хотя все казалось нормально (согласно примерам файлов / makefile).
Затем я использовал свалку Visual Studio. чтобы проверить, присутствовали ли в библиотеке неразрешенные функции. Одним из примеров неразрешенного внешнего объекта была функция с именем _cblas_sgemm
. При сбросе символов из библиотеки (dumpbin /symbols mkl_core.lib
) мне удалось найти в библиотеке только функцию cblas_sgemm
, в которой отсутствует префикс _
. Затем я обнаружил, что на самом деле функция называлась только cblas_sgemm и что компилятор добавил префикс _
как часть правила искажения имени.
TL;DR
Итак, мои вопросы:
- Отображает ли
dumpbin
полное имя точки входа в библиотеку? Или по какой-то причине он действительно «распутывает» имя? - Библиотека шла в комплекте с установочным пакетом, поэтому я не знаю, какой компилятор использовался для ее компиляции. Создают ли разные компиляторы разные имена?
Я действительно не думаю, что понял это правильно; Я, вероятно, делаю что-то не так где-то еще, но я хочу быть уверенным в этих двух вопросах.
Аналогичный вопрос без ответов находится здесь.