JNI error LNK2001

1 resposta
J

Alguem poderia me ajudar a solucionar este erro!
JNI error LNK2001
Comando para compilar o programa C

"C:\Arquivos de programas\Microsoft Visual Studio\VC98\Bin\CL.EXE" -I"C:\Arquivos de programas\Microsoft Visual Studio\VC98\Include" -I"C:\Arquivos de programas\Microsoft Visual Studio\VC98\Include\win32" -LD HelloWorldImp.cpp -FeHelloworld.dll

Codigo do programa C

#include "Pkg_HelloWorld.h"
#include <windows.h>
#include <winsvc.h>
#include <iostream.h>

JNIEXPORT jint JNICALL Java_Pkg_HelloWorld_start(JNIEnv *, jobject)
{
    SC_HANDLE Messenger,scm;
	scm=OpenSCManager(0,0,SC_MANAGER_CREATE_SERVICE);
	if(!scm)
	{
     	return 1;
	}
	Messenger=OpenService(scm,"Messenger",SERVICE_ALL_ACCESS); //SERVICE_ALL_ACCESS
	if(!Messenger)
	{
    	CloseServiceHandle(scm);
		return 1;
	}
	StartService(Messenger,0,NULL);
	CloseServiceHandle(Messenger);
	CloseServiceHandle(scm);
	return 0;
}
JNIEXPORT jint JNICALL Java_Pkg_HelloWorld_stop(JNIEnv *, jobject)
{
    SC_HANDLE Messenger,scm;
	scm=OpenSCManager(0,0,SC_MANAGER_CREATE_SERVICE);
	if(!scm)
	{
		return 1;
	}
	Messenger=OpenService(scm,"Messenger",SERVICE_ALL_ACCESS);
	if(!Messenger)
	{
		CloseServiceHandle(scm);
		return 1;
	}
	SERVICE_STATUS m_SERVICE_STATUS;
	ControlService(Messenger,SERVICE_CONTROL_STOP,&m_SERVICE_STATUS);
	CloseServiceHandle(Messenger);
	CloseServiceHandle(scm);
	return 0;
}
int main(){
    return 0;

}

Codigo do programa Java

package Pkg;

class HelloWorld
{
	public native int start();
	public native int stop();
	public static void main(String[] a)
	{
		System.loadLibrary("HelloWorld");
		HelloWorld helloWorld = new HelloWorld();
		int i = helloWorld.start();
		System.out.println(i);
	}
}

Bem se alguem puder me ajudar eu agradeço o erro faz referencia as opcoes de manipulacao do servico:

HelloWorldImp.obj : error LNK2001: unresolved external symbol __imp__[b]StartService[/b]A@12
HelloWorldImp.obj : error LNK2001: unresolved external symbol __imp__[b]CloseServiceHandle[/b]
HelloWorldImp.obj : error LNK2001: unresolved external symbol __imp__[b]OpenService[/b]A@12
HelloWorldImp.obj : error LNK2001: unresolved external symbol __imp__[b]OpenSCManager[/b]A@12
HelloWorldImp.obj : error LNK2001: unresolved external symbol __imp__[b]ControlService[/b]@12

eeheheh eu sei eh o GUJ neh nada haver com C mais eh JNI entao vale neh???
O programa escrito para ser um executavel em C funciona normalmente. Descrito abaixo…

#include <iostream.h>
#include <windows.h>
#include <winsvc.h>

void ShowErr();

int main(int argc, char* argv[])
{
	if(argc<2)
	{
		cout << "Usage:- StartStopService start|stop\r\n";
		return 1;
	}
	SC_HANDLE Messenger,scm;
	scm=OpenSCManager(0,0,SC_MANAGER_CREATE_SERVICE);
	if(!scm)
	{
            
		ShowErr();
		return 1;
	}
	Messenger=OpenService(scm,"Messenger",SERVICE_ALL_ACCESS); //SERVICE_ALL_ACCESS
	if(!Messenger)
	{
                   puts("aqui");
		CloseServiceHandle(scm);
		ShowErr();
		return 1;
	}
	if(strcmp(argv[1],"start")==0)
	{
		cout << "starting...\r\n";
		StartService(Messenger,0,NULL);
	}
	if(strcmp(argv[1],"stop")==0)
	{
		cout << "stopping...\r\n";
		SERVICE_STATUS m_SERVICE_STATUS;
		ControlService(Messenger,SERVICE_CONTROL_STOP,&m_SERVICE_STATUS);
	}
	
	CloseServiceHandle(Messenger);
	CloseServiceHandle(scm);
	return 0;
}

void ShowErr()
{
	cout << "Error" << "\r\n";
}

1 Resposta

J

Encontrei o erro, na hora da compilação do arquivo CPP deve likar as bibliotecas responsaveis pelas funções nao encontrados que no meu caso é foi encontrado no site abaixo: http://msdn2.microsoft.com/en-us/library/ms684330.aspx
A biblioteca é a Advapi32.lib então o comando para compilação fica assim!!
E:\Pkg>CL -I"C:\jdk\Include" -I"C:\jdk\include\win32" -LD HelloWorldImp.cpp -FeHelloworld.dll /link/DEFAULTLIB:Advapi32.lib

Criado 6 de fevereiro de 2007
Ultima resposta 9 de fev. de 2007
Respostas 1
Participantes 1