求问怎么使用vs2013将C语言代码编译为.dll文件
求问如何使用vs2013将C语言代码编译为.dll文件
我看到网上有一个jvmti agent 的教程,其中有一步是将agent代码编译为.dll文件。
之前我用vc++编译了,但是是32位的,而使用的jvm是64位的,所以想用vs编译
为64位的.dll文件,但不知道怎么编译,求热心人解答。如何可以用其他方法编译
的话也希望好心人告之。其中要编译的代码如下
/*
* Just a simple agent using JVMTI.
*
* Created on: 2011-3-3
* Author: kenwu
*/
#include <jvmti.h>
#include <string>
#include <cstring>
#include <iostream>
#include <list>
#include <map>
#include <set>
#include <stdlib.h>
#include <jni_md.h>
JNIEXPORT jint JNICALL Agent_OnAttach(JavaVM *jvm, char *options,
void *reserved) {
jvmtiEnv *jvmti;
jint result = jvm->GetEnv((void **) &jvmti, JVMTI_VERSION_1_1);
if (result != JNI_OK) {
printf("ERROR: Unable to access JVMTI!\n");
}
jvmtiError err = (jvmtiError) 0;
jclass *classes;
jint count;
err = jvmti->GetLoadedClasses(&count, &classes);
if (err) {
printf("ERROR: JVMTI GetLoadedClasses failed!\n");
}
for (int i = 0; i < count; i++) {
char *sig;
jvmti->GetClassSignature(classes[i], &sig, NULL);
printf("cls sig=%s\n", sig);
}
return err;
}
JNIEXPORT void JNICALL Agent_OnUnload(JavaVM *vm) {
// nothing to do
}
------解决思路----------------------
你的函数前面的JNIEXPORT ,并不是__declspec(dllexport),他是java调用本地c++接口用的 你还的给你的函数或者类前面加上
__declspec(dllexport)或者def文件才能有lib和dll
------解决思路----------------------
你的函数前面的JNIEXPORT ,并不是__declspec(dllexport),他是java调用本地c++接口用的 你还的给你的函数或者类前面加上
__declspec(dllexport)或者def文件才能有lib和dll
我看到网上有一个jvmti agent 的教程,其中有一步是将agent代码编译为.dll文件。
之前我用vc++编译了,但是是32位的,而使用的jvm是64位的,所以想用vs编译
为64位的.dll文件,但不知道怎么编译,求热心人解答。如何可以用其他方法编译
的话也希望好心人告之。其中要编译的代码如下
/*
* Just a simple agent using JVMTI.
*
* Created on: 2011-3-3
* Author: kenwu
*/
#include <jvmti.h>
#include <string>
#include <cstring>
#include <iostream>
#include <list>
#include <map>
#include <set>
#include <stdlib.h>
#include <jni_md.h>
JNIEXPORT jint JNICALL Agent_OnAttach(JavaVM *jvm, char *options,
void *reserved) {
jvmtiEnv *jvmti;
jint result = jvm->GetEnv((void **) &jvmti, JVMTI_VERSION_1_1);
if (result != JNI_OK) {
printf("ERROR: Unable to access JVMTI!\n");
}
jvmtiError err = (jvmtiError) 0;
jclass *classes;
jint count;
err = jvmti->GetLoadedClasses(&count, &classes);
if (err) {
printf("ERROR: JVMTI GetLoadedClasses failed!\n");
}
for (int i = 0; i < count; i++) {
char *sig;
jvmti->GetClassSignature(classes[i], &sig, NULL);
printf("cls sig=%s\n", sig);
}
return err;
}
JNIEXPORT void JNICALL Agent_OnUnload(JavaVM *vm) {
// nothing to do
}
------解决思路----------------------
你的函数前面的JNIEXPORT ,并不是__declspec(dllexport),他是java调用本地c++接口用的 你还的给你的函数或者类前面加上
__declspec(dllexport)或者def文件才能有lib和dll
------解决思路----------------------
你的函数前面的JNIEXPORT ,并不是__declspec(dllexport),他是java调用本地c++接口用的 你还的给你的函数或者类前面加上
__declspec(dllexport)或者def文件才能有lib和dll