当前位置: 技术问答>linux和unix
请问怎么用gcc生成.so文件,谢谢
来源: 互联网 发布时间:2015-09-16
本文导语: re | 这个是jni的问题, 应该这样调用 System.loadLibrary("Name") java会将库名进行映像,根据平台的不同,库名也不同,在linux上,上面的调用将库映射为libName.so (hehe,就是linux的ld -l标志的规则。)...
re
|
这个是jni的问题,
应该这样调用
System.loadLibrary("Name")
java会将库名进行映像,根据平台的不同,库名也不同,在linux上,上面的调用将库映射为libName.so (hehe,就是linux的ld -l标志的规则。),就是加了前缀lib和后缀.so。
所以,那个Name.so当然是找不到了。就抛出了UnsatisfiedLinkError异常。
java找这个库就是在LD_LIBRARY_PATH的路径中找的,你做的是正确的。
如果想要指定文件名调用,用Runtime.Load(文件名);
多说一句,在windows上则映射为Name.dll
应该这样调用
System.loadLibrary("Name")
java会将库名进行映像,根据平台的不同,库名也不同,在linux上,上面的调用将库映射为libName.so (hehe,就是linux的ld -l标志的规则。),就是加了前缀lib和后缀.so。
所以,那个Name.so当然是找不到了。就抛出了UnsatisfiedLinkError异常。
java找这个库就是在LD_LIBRARY_PATH的路径中找的,你做的是正确的。
如果想要指定文件名调用,用Runtime.Load(文件名);
多说一句,在windows上则映射为Name.dll
|
GCC=gcc
CFLAGS=-Wall -ggdb -fPIC
#CFLAGS=
all: libfunc
libfunc:func.o func1.o
$(GCC) -shared -Wl,-soname,libfunc.so.1 -o libfunc.so.1.1 $
CFLAGS=-Wall -ggdb -fPIC
#CFLAGS=
all: libfunc
libfunc:func.o func1.o
$(GCC) -shared -Wl,-soname,libfunc.so.1 -o libfunc.so.1.1 $