【发布时间】:2012-03-10 11:58:16
【问题描述】:
请帮忙,我花了一整天的时间来编译我的 c++ 应用程序。
我的项目包含一个源文件: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:_\include;C:\frankenstein\includes;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\include
库路径: C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib
我检查了 lib 目录,它包含一个“libcmt.lib”文件。不知道它是否区分大小写,但我知道我从未更改过 Visual Studio 文件或目录中的任何内容。
有人能告诉我如何完成这项工作吗?
【问题讨论】:
-
顺便说一句,这个文件存在于我的驱动器上:C:_\include\com_Foo.h,对 libcmt 的依赖必须间接来自 jni.h 包含。
-
我认为这可能源于没有在 Visual Studio 中创建代码,而是尝试使用它的编译器。我在 Code::Blocks 中创建了应用程序,当我无法使 MinGW32 g++ 编译器工作时,我尝试使用 Visual Studio 编译器。也许它假设了某种项目配置。 Visual Studio编译器是否可能仅在项目在Visual Studio中构建时才有效?
-
这可能是一个相当古老的线程,但由于我现在遇到它,我认为它可能有用。 @mrsheen 下面的答案对我有用,但我必须从开发人员 cmd 运行程序,而不是正常运行程序(错误仍然存在)。仅供可能仍在寻找此功能的人参考。
标签: c++ compilation