Изменение имени и помойка

Вчера я помогал другу компилировать примеры Java для Intel MKL. У нас были проблемы с "неразрешенными внешними файлами", хотя все казалось нормально (согласно примерам файлов / makefile).

Затем я использовал свалку Visual Studio. чтобы проверить, присутствовали ли в библиотеке неразрешенные функции. Одним из примеров неразрешенного внешнего объекта была функция с именем _cblas_sgemm. При сбросе символов из библиотеки (dumpbin /symbols mkl_core.lib) мне удалось найти в библиотеке только функцию cblas_sgemm, в которой отсутствует префикс _. Затем я обнаружил, что на самом деле функция называлась только cblas_sgemm и что компилятор добавил префикс _ как часть правила искажения имени.

TL;DR

Итак, мои вопросы:

  1. Отображает ли dumpbin полное имя точки входа в библиотеку? Или по какой-то причине он действительно «распутывает» имя?
  2. Библиотека шла в комплекте с установочным пакетом, поэтому я не знаю, какой компилятор использовался для ее компиляции. Создают ли разные компиляторы разные имена?

Я действительно не думаю, что понял это правильно; Я, вероятно, делаю что-то не так где-то еще, но я хочу быть уверенным в этих двух вопросах.

Аналогичный вопрос без ответов находится здесь.


person Bruno Brant    schedule 02.12.2011    source источник
comment
Мне кажется, вы пытаетесь связать версию Fortran.   -  person Hans Passant    schedule 02.12.2011
comment
@HansPassant, можешь уточнить...?   -  person Bruno Brant    schedule 03.12.2011


Ответы (1)


  1. dumpbin покажет полное имя символа в библиотеке (не в исходнике), без каких-либо изменений. Для MS, искаженных именами C++, он покажет исходный символ в скобках (если он может определить исходный символ). (проверено с дампом 9.00.21022.08)

  2. Разные компиляторы генерируют разные символы, особенно для символов C++. Для символов компиляторы, как правило, имеют соглашение об изменении имени, поэтому extern "C" символов могут быть связаны между разными компиляторами.

Вот статья в Википедии об изменении имен.

person fefe    schedule 02.12.2011
comment
Спасибо за информацию! Попытаюсь выяснить, не проблема ли все-таки с библиотекой. - person Bruno Brant; 03.12.2011