2012-02-20 4 views
7

Пожалуйста, помогите, я потратил весь день, пытаясь скомпилировать приложение для C++.LINK: фатальная ошибка LNK 1104: невозможно открыть файл 'LIBCMT.lib'

Мой проект содержит один файл: Foo.cpp. Вот его код:

#include <jni.h> 
#include <com_Foo.h> 

JNIEXPORT jint JNICALL Java_com_Foo_add 
(JNIEnv * env, jobject obj, jint x, jint y) 
{ 
    return x+y; 
} 

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

C:\Users\michael\cworkspace\foo>cl -LD Foo.cpp -FeFoo.dll 
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.30319.01 for 80x86 
Copyright (C) Microsoft Corporation. All rights reserved. 

Foo.cpp 
Microsoft (R) Incremental Linker Version 10.00.30319.01 
Copyright (C) Microsoft Corporation. All rights reserved. 

/dll 
/implib:Foo.lib 
/out:Foo.dll 
Foo.obj 
LINK : fatal error LNK1104: cannot open file 'LIBCMT.lib' 

В моей среде я установил:

ВКЛЮЧЕН: C: _ \ включает; C: \ Франкенштейн \ включает в себя: C: \ Program Files \ Java \ jdk1.6.0_24 \ include; C: \ Program Files \ Java \ jdk1.6.0_24 \ include \ win32; C: _ \ include \ win32; C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ VC \ включают

LIBPATH: C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ VC \ Lib

Я проверил в каталоге lib, он содержит файл «libcmt.lib». Не знаю, чувствителен ли он к регистру, но я знаю, что ничего не изменил в файлах или каталогах визуальной студии.

Кто-нибудь, пожалуйста, скажите мне, как я могу сделать эту работу?

+0

BTW, этот файл существует на моем диске: C: \ _ \ include \ com_Foo.h, зависимость от libcmt должна поступать косвенно из jni.h include. – msknapp

+0

Я думаю, что это может быть связано с тем, что вы не создаете код в visual studio, но пытаетесь использовать его компилятор в любом случае. Я создал приложение в Code :: Blocks, и когда я не смог заставить компилятор MinGW32 g ++ работать, я попытался использовать компилятор visual studio. Возможно, он предполагает определенную конфигурацию проекта. Возможно ли, что компилятор визуальной студии работает только тогда, когда проект был создан в визуальной студии? – msknapp

+0

Это, пожалуй, довольно старая нить, но поскольку я столкнулся с ней сейчас, я подумал, что это может быть полезно. Ответ @ mrsheen ниже работал для меня, но мне пришлось запускать программу из разработчика cmd, а не из нормального (где ошибка сохранялась). Просто FYI для тех, кто все еще может найти это там. – prateek1592

ответ

11

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

Чтобы убедиться, что среда командной строки настроена правильно, убедитесь, что вы выполнили пакетный файл vsvars32.bat.

+0

Это не устраняет проблему. В моей системе cl не работает, если я сначала запускаю vsvars32.bat. Я все еще получаю ошибку. – Pillager225

+1

Это исправило мою проблему! Благодаря! – sibley

+1

@sibley вы можете отметить это как правильный ответ –

2

Это работает для меня, когда я получил ...

fatal error LNK1104: cannot open file 'LIBCMT.lib' 

Ваше имя проекта == «Название проекта» для этого примера.

Перейдите в окно «Solution Explorer» для вашего проекта.

ПРАВО Щелкните по проекту «Название проекта», а не «Название проекта».

Это откроет длинное меню.

В нижней части находится «Свойства» Нажмите на него.

Это откроет «Название проекта« Окно «Страницы свойств».

IF имя окна (вверху слева) говорит, что ...

«Решение„Название проекта“Страницы свойств

Закрыть это окно, вы сразу же нажал на решения, а не проект , вам нужно щелкнуть правой кнопкой мыши по имени проекта.

На «Название проекта» Property Pages

Левая панель расширяющие Свойства конфигурации

Затем нажмите на Генеральный

Теперь правая панель должна показывать "Общие «Свойства конфигурации» для вашего текущего проекта.

Посмотрите список вниз до «Platform Toolset»

Если версия VS используется не один в списке вам необходимо изменить его.

Чтобы изменить версию VS, просто поместите указатель мыши в конец текущего имени версии VS, которое отображается и щелкните.

Коробка со стрелкой вниз покажет в правой части этой строки, щелкните по ней.

Это откроет окно со списком версий VS.

Выберите версию VS, которую вы используете сейчас.

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

Затем в нижней части «Названия проекта» Страница свойств нажмите Применить, затем OK.

Теперь попробуйте построить Проект.

Надеюсь, это поможет, это работает для меня при работе над проектами, которые были построены с более ранними версиями VS.

Удачи Майку.

0

У меня такая же ошибка при запуске cl.exe из командной строки Командная строка разработчика для VS2012 командного окна. Оказалось, что все, что мне нужно было сделать, это перезапустить командную строку, щелкнув ее правой кнопкой мыши и выбрав Запуск от имени администратора.

Смежные вопросы