Невозможно связать библиотеку Intel Math Kernel с Xcode, так как нет папки Intel_MKL.framework - PullRequest
0 голосов
/ 18 октября 2011

Я пытаюсь использовать библиотеку Intel Math Kernel (MKL) на 64-битном Mac под управлением Mac OSX 10.6.6 и Xcode 3.2.6. Для Mac Intel MKL доступен только при установке полного Intel Composer XE 2011 C ++ компилятора. Я сделал это, и я запускаю сценарии bash

/Developer/opt/intel/composer_xe_2011_sp1.6.038/mkl/bin/intel64/mklvars_intel64.sh
/Developer/opt/intel/composer_xe_2011_sp1.6.038/link_install.sh

для установки переменных среды для Composer XE и MKL. Я могу использовать компилятор для создания простых тестовых проектов в XCode.

Однако я не могу использовать MKL, потому что не могу связать его в Xcode , как описано здесь . У меня нет папки инфраструктуры MKL, как описано в этой гиперссылке

/Library/Frameworks/Intel_MKL.framework/

(Если быть точным, в моей системе нет папки с названием Intel_MKL.framework.) Проверка наличия этой папки упоминается в нескольких справочных руководствах MKL от Intel, но нигде не говорится, что делать, если это не существует! Кажется, предполагается, что он существует, если вы правильно установили MKL, но у меня («Установка Composer XE успешно») и нет Intel_MKL.framework.

Если это имеет значение, я получаю ошибку

"_dsyevx", referenced from:
jEigenvalues(TNT::Array2D<double>&, TNT::Array1D<double>&)in main.o 
ld: symbol(s) not found
collect2: ld returned 1 exit status

что, как я понимаю, согласуется с неправильной связью.

Я потратил много времени и усилий, пытаясь получить помощь, включая форумы Intel, но безрезультатно. Я подозреваю, что это простая проблема (я просто любитель).

Большое спасибо за любую помощь.


EDIT:

По предложению Пола я перезапустил установщик без изменений. Единственный файл mkl.h находится в

/Developer/opt/intel/composer_xe_2011_sp1.6.038/mkl/include 

, а также ожидаемая идентичная копия в каталоге установки без Xcode

/opt/intel/composer_xe_2011_sp1.6.038/mkl/include

Я не знаю, если это то, что я должен перечислить в "пути поиска заголовка" в XCode, но я перечислил это давно. Я также перечислил

/Developer/opt/intel/composer_xe_2011_sp1.6.038/mkl/lib 

как «путь поиска в библиотеке», и я добавил эти флаги компоновщика, основываясь на моей лучшей попытке прочитать это руководство 2011 :

-libmkl_intel_lp64.a 
-libmkl_core.a 
-libmkl_sequential.a 
-libmkl_intel_thread.a

Ничего не изменилось, и я получаю ту же ошибку:

ld returned 1 exit status

Может ли быть проблема с динамическим или статическим соединением? Я выбрал статическое связывание (.a окончания, а не .dylib), потому что это казалось более простым, но я понятия не имею. Переход на динамический ничего не сделал.

Есть ли здесь возможность получить отзыв, здесь? Я понятия не имею, что изменить на основе этой ошибки.


EDIT2:

Я только что нашел опцию «Использовать библиотеку Intel Math Kernel» в Xcode «Информация о проекте» (одна из, возможно, 100 опций), о которой я понятия не имел. (Где я должен узнать об этом?) Сейчас все строится, но когда я запускаю исполняемый файл, я получаю

exit;
dyld: Library not loaded: libmkl_intel_lp64.dylib
  Referenced from: /Users/.../nameofexecutable
  Reason: image not found
Trace/BPT trap
logout

Я дважды проверил правильность каталога поиска библиотеки. Я также попытался переключить статические библиотеки с окончанием .a, но ошибка была точно такой же. (Все еще имели окончания .dylib.) Значит ли это, что я застрял с динамикой? Зачем? Я также определил переменную

DYLD_LIBRARY_PATH

будет

/Developer/opt/intel/composer_xe_2011_sp1.6.038/compiler/lib: /Developer/opt/intel/composer_xe_2011_sp1.6.038/mkl/lib

как предложено в старых инструкциях здесь , но ничего не изменилось.

Ух, это ужасно сложно.

Ответы [ 2 ]

1 голос
/ 24 ноября 2013

ВАЖНОЕ РЕДАКТИРОВАНИЕ

То, что написано в этом редакторе, работает по крайней мере, когда я запускаю исполняемый файл "из XCODE".Когда я нахожу каталог, в который он встроен, и дважды щелкаю по нему, я получаю это сообщение:

Last login: Sun Nov 24 17:05:19 on ttys002
MacBook-Pro-de-totouser:~ totouser$ /Users/totouser/Library/Developer/Xcode/DerivedData/THECONSOLEAPPLICATION-hknajgycvjjcotdtkeeyxbzmtfty/Build/Products/Debug/THECONSOLEAPPLICATION ; exit;
dyld: Library not loaded: libmkl_sequential.dylib
  Referenced from: /Users/totouser/Library/Developer/Xcode/DerivedData/THECONSOLEAPPLICATION-hknajgycvjjcotdtkeeyxbzmtfty/Build/Products/Debug/THECONSOLEAPPLICATION
  Reason: image not found
Trace/BPT trap: 5
logout

[Процесс завершен]

Если кто-то может помочь, это было бы неплохопотому что я действительно застрял здесь

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// *

Хорошо,Мне удалось сделать то, что вы хотели сделать:

Я установил m_ccompxe_2013_sp1.1.103 под Mac OS 10.8.5 64bit, где я использую XCode 5.0.2.

Первое, что нужно сделать для ссылкиMKL включить каталог в проекте.Прежде чем сделать это, я хотел бы подчеркнуть, что даже после того, как я это сделал, мне никогда не удавалось написать что-то вроде этого в коде c ++

#include "mkl.h"

, и я был вынужден указать полный путь к mkl.hфайл, который был немного скучным, так как в идеале я хотел бы поставить так:

#include <mkl>
#include <mkl_vsl.h>
#include <mkl_vsl_functions.h>

и т. д.Так, я нашел, например, файл «iostream» на моем Mac, скопировал его куда-то, изменил имя копии на mkl и поместил содержимое mkl.h (который находится в /opt/intel/composer_xe_2013_sp1.1.103/mkl/include"на моем mac) в нем, сохраните его в" /opt/intel/composer_xe_2013_sp1.1.103/mkl/include ", и я сослался на каталог" /opt/intel/composer_xe_2013_sp1.1.103/mkl/include "во включаемых каталогахмой проект xcode.Как я это сделал?

Я дважды щелкнул «target», затем «build settings», затем «all» и искал меню «search paths».Там

1) в «пути поиска заголовка», отладке и выпуске я помещаю «/opt/intel/composer_xe_2013_sp1.1.103/mkl/include» и «/opt/intel/composer_xe_2013_sp1.1.103/mkl/include/ intel64 "

2) в" пути поиска библиотеки ", отладку и выпуск я помещаю" /opt/intel/composer_xe_2013_sp1.1.103/compiler/lib/intel64 "и" /opt/intel/composer_xe_2013_sp1.1.103/compiler / lib "и" /opt/intel/composer_xe_2013_sp1.1.103/mkl/lib"

Затем я отредактировал переменную окружения "DYLD_LIBRARY_PATH" (только в моем проекте), чтобы сделать ее равной "/ opt / intel /composer_xe_2013_sp1.1.103 / составитель / Библиотека: /opt/intel/composer_xe_2013_sp1.1.103/compiler/lib/intel64: /opt/intel/composer_xe_2013_sp1.1.103/mkl/lib».Как я это сделал?Я щелкнул по названию значка моего проекта в непосредственной близости от треугольника и квадратных кнопок слева от верхней панели, а затем я нажал на «Редактировать схему», которая открыла окно, а затем нажал «Запустить мой проект».«Отладка» в левом столбце этого окна, а затем я щелкнул «Аргумент», перешел в «переменные среды» и + «новая переменная с именем DYLD_LIBRARY_PATH со значением

/ opt / intel / composer_xe_2013_sp1.1.103/compiler/lib:/opt/intel/composer_xe_2013_sp1.1.103/compiler/lib/intel64:/opt/intel/composer_xe_2013_sp1.1.103/mkl/lib

Bizarrly, этот набор также используется для запуска моего проекта", что было хорошо для меня, но я все еще нахожу это странным.В любом случае.

После этого мне пришлось добавить команду, сообщающую компилятору (LLVM 5, ничего не изменившую с этим), чтобы связать библиотеки, которые я собирался использовать:

дляэто я дважды кликнул обратно на «target», затем вошел в «настройки сборки», затем во «all», и искал тогда «другие флаги компоновщика», где в отладке и в релизе я поставил:

-lmkl_sequential-lmkl_core -lmkl_intel_lp64 -lpthread -lmkl_intel_thread -liomp5

Затем в main.cpp я поставил, например:

#include <iostream>
// #include "/opt/intel/composer_xe_2013_sp1.1.103/mkl/include/mkl.h"
// #include "/opt/intel/composer_xe_2013_sp1.1.103/mkl/include/mkl_vsl.h"
// #include "/opt/intel/composer_xe_2013_sp1.1.103/mkl/include/mkl_vsl_functions.h"
#include <mkl>
#include <mkl_vsl.h>
#include <mkl_vsl_functions.h>

int main(int argc, const char * argv[])
{
    VSLStreamStatePtr stream;
    vslNewStream(&stream, VSL_BRNG_SFMT19937, 777);
    double * pUNIF = new double [ 1000000 ] ;
    vdRngUniform(VSL_RNG_METHOD_UNIFORM_STD_ACCURATE, stream, 1000000, pUNIF, 0.0, 1.0);
    vslDeleteStream(&stream);
    for (int i = 0 ; i < 100000 ; ++i )
    {
        std::cout << *(pUNIF+i) << std::endl;
    }
    std::cout << "END." << std::endl;
    getchar();
    return 0;
}

Затем я собрал и запустил, у меня все было в порядке; -)

Как сказал бы уважаемый сэр Малкольм Такер: «Никогда не легко, никогда не ***** просто».

С уважением,

MEF.

1 голос
/ 18 октября 2011

С ICC 11.1 на OS X 10.6.8 инфраструктура MKL находится здесь:

/opt/intel/Compiler/11.1/058/Frameworks/mkl

Предполагая, что это более новая версия (ICC 12?), Вам может потребоваться немного покопаться, чтобы найти соответствующий каталог, если Intel переместил его.

(Обратите внимание, что статья Intel, на которую вы ссылаетесь, относится к июню 2009 года и относится к ICC 11.0.)

...