Статическая ссылка intel CRT - PullRequest
3 голосов
/ 14 июня 2011

Я компилирую код на C, используя компилятор intel. Я интегрировал icc с visual studio 2010. Я хочу создать оптимизированный исполняемый файл, который будет работать на компьютере с Windows. Это на самом деле виртуальная машина в облаке. У меня нет возможности установить какую-либо распространяемую библиотеку на целевой компьютер. Я хочу статически связать все необходимые библиотеки. Как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 14 июня 2011

Полагаю, вы имели в виду icl, поскольку упоминаете VS2010 / Windows (icc будет версией для Linux / Mac): просто выберите «Многопоточный (/ MT)» в разделе «Параметры проекта» -> «Свойства конфигурации» -> «C / C ++» -> Генерация кода должна работать.Это приведет к тому, что среда выполнения MSVC и Intel будут статически связаны в приложении.

Но тогда это также зависит от того, какие другие библиотеки вы используете, это может работать не для всех.В этом случае вы можете проверить зависимости с помощью depen.exe (http://www.dependencywalker.com/) и скопировать их рядом с вашим .exe на целевой компьютер.

0 голосов
/ 14 июня 2011

Попробуйте добавить -i-static -static-libcxa к окончательному связыванию.

Это должно привести к статическому связыванию только для библиотек Intel.

(Вы также можете попробовать -static, как указано в комментарии littleadv,но это приведет к созданию огромного статического исполняемого файла без общих библиотек)

Еще одно замечание: простой обходной путь - скопировать исполняемый файл с необходимыми общими библиотеками (которые не существуют на хосте) втот же каталог.Затем установите LD_LIBRARY_PATH=. перед запуском динамически связанного исполняемого файла.Это заставит искать библиотеки в текущем каталоге, а также в системных каталогах.

РЕДАКТИРОВАТЬ: Я только что заметил, что вы сказали "Windows Machine".Вышеуказанное относится к машинам UNIX, поэтому, вероятно, не полезно для вас.Я оставлю это здесь на случай, если кому-то понадобится информация.

...