用gcc生成.so文件时出错

luole_xman 2007-03-19 09:35:57
各位大侠,小弟.最近再做jni有关的项目.先前在windows 下运行成功.可是当换到sorlaris 上时,用 gcc -c uf_revoke_exc.c -o uf_revoke_exc.so 命令时,却报出一长串错误.截图如下:
/usr/java/include/jni.h:507: warning: data definition has no type or storage cl
ss
/usr/java/include/jni.h:508: error: syntax error before '*' token
/usr/java/include/jni.h:509: error: syntax error before "jvalue"
/usr/java/include/jni.h:509: error: `jint' declared as function returning a fun
tion
/usr/java/include/jni.h:509: warning: data definition has no type or storage cl
ss
/usr/java/include/jni.h:511: error: syntax error before '*' token
/usr/java/include/jni.h:512: error: `jlong' declared as function returning a fu
ction
/usr/java/include/jni.h:512: warning: data definition has no type or storage cl
ss
/usr/java/include/jni.h:513: error: syntax error before '*' token
/usr/java/include/jni.h:514: error: `jlong' declared as function returning a fu
ction
/usr/java/include/jni.h:514: warning: data definition has no type or storage cl
ss
/usr/java/include/jni.h:515: error: syntax error before '*' token
/usr/java/include/jni.h:516: error: syntax error before "jvalue"
/usr/java/include/jni.h:516: error: `jlong' declared as function returning a fu
ction
/usr/java/include/jni.h:516: warning: data definition has no type or storage cl
ss
/usr/java/include/jni.h:518: error: syntax error before '*' token
/usr/java/include/jni.h:520: error: syntax error before '*' token
/usr/java/include/jni.h:522: error: syntax error before '*' token
/usr/java/include/jni.h:525: error: syntax error before '*' token
/usr/java/include/jni.h:527: error: syntax error before '*' token
/usr/java/include/jni.h:529: error: syntax error before '*' token
/usr/java/include/jni.h:532: error: syntax error before '*' token
/usr/java/include/jni.h:534: error: syntax error before '*' token
/usr/java/include/jni.h:536: error: syntax error before '*' token
/usr/java/include/jni.h:539: error: syntax error before '*' token
/usr/java/include/jni.h:541: error: syntax error before '*' token
/usr/java/include/jni.h:543: error: syntax error before '*' token
/usr/java/include/jni.h:545: error: syntax error before '*' token

不知道是什么地方出了问题,请各位大侠指点一下.感激不尽!谢谢.
...全文
551 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
shockwave_115 2007-03-25
  • 打赏
  • 举报
回复
当然在java的include目录里了,你看一下你的java在哪里?找一下java/include
luole_xman 2007-03-22
  • 打赏
  • 举报
回复
没人知道吗?
无知者无谓 2007-03-20
  • 打赏
  • 举报
回复
应该是没有包含某个必要的头文件,或者头文件包含顺序问题
warabi 2007-03-20
  • 打赏
  • 举报
回复
不知道你具体的源代码,
不过一般的方法是从头开始

/usr/java/include/jni.h:508: error: syntax error before '*' token
查一下508行,在*前应该是一个类型名,
这个类型实际定义的地方被include进来了吗?
或者是定义有错误什么的

(也有可能就是507句的定义出错造成的)
luole_xman 2007-03-20
  • 打赏
  • 举报
回复
源代码如下:
/export/home/webfb目录下java程序:server.java

import java.net.*;
import java.io.*;

public class server extends Thread
{
static
{
System.loadLibrary("uf_revoke_exc");
}
public native static int add(String c);
private Socket client;
public server(Socket c)
{
this.client=c;
}
public void run()
{
try
{
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
PrintWriter send = new PrintWriter(client.getOutputStream());
//Mutil User but can't parallel
while(true)
{
String str=in.readLine();
System.out.println(str);
send.println(server.add(str));
System.out.println("has receive....");
send.flush();
if(str.equals("end"))
break;
}
client.close();
}
catch(IOException ex)
{
}
finally
{
}
}
public static void main(String[] args) throws IOException
{
ServerSocket server=new ServerSocket(1900);
while(true)
{
//transfer location change Single User or Multi User
server mu=new server(server.accept());
mu.start();
}
}
}
用javah server命令生成.h文件如下:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class server */

#ifndef _Included_server
#define _Included_server
#ifdef __cplusplus
extern "C" {
#endif
/* Inaccessible static: threadInitNumber */
/* Inaccessible static: stopThreadPermission */
#undef server_MIN_PRIORITY
#define server_MIN_PRIORITY 1L
#undef server_NORM_PRIORITY
#define server_NORM_PRIORITY 5L
#undef server_MAX_PRIORITY
#define server_MAX_PRIORITY 10L
/*
* Class: server
* Method: add
* Signature: (Ljava/lang/String;)I
*/
JNIEXPORT jint JNICALL Java_server_add
(JNIEnv *, jclass, jstring);

#ifdef __cplusplus
}
#endif
#endif

在相同目录下c语言程序uf_revoke_exc.c:
#include <server.h>

JNIEXPORT jint JNICALL Java_server_add(JNIEnv *w, jclass a, jstring j)
{
char* t;
t = (char*)w->GetStringUTFChars(j,0);
if(strcmp(t,"socket") == 0)
return 0;
else
return 1;
}
然后运行gcc: gcc -c uf_revoke_exc.c -o uf_revoke_exc.o -I/usr/j2se/include后,
就出现上面的错误了.请大侠们指点.

有人知道SOLARIS系统下JNI.H的具体调用路径吗?

1,543

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 Solaris
社区管理员
  • Solaris
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧