我正在尝试从java(JNA)中的c++.so文件访问函数。我可以从这个.so文件中调用简单的"Hello"类型函数。但是,当我试图访问从其他文件(用C编写的.so文件)内部调用函数的其他函数时,我会遇到以下异常:线程"main"java.lang.UnsisfiedLinkError中出现异常:/home/stpl/workspace/TestJNA/bin/libhello.so:未定义符号:PInit
我陷入了困境。任何帮助都将不胜感激。
现在我的问题解决了。如果有人有同样的问题,问题出现在.so文件中。下面是.mk文件创建.so文件的脚本。
CC=g++CFLAG=-g-O0
PRNINC=-I/包括-I/PRT.IF-I/应用程序PRNLIBS=-lHWIGotPrinter-lcommon-lpthread-ldl
ASTYLE=ASTYLEASTYLEFLAGS=--style=ansi-t-p-b-S-K
compiledate=$(外壳日期'+%F%T')DEFS=-D DEFINE_MKDATE="\"$(compiledate)\"
INC_PUB=-I/包括-I/PRT.IF-I/SCANNER.IF-I/包括INCLUDE=$(INC_PUB)
%.o:%.cpp$(CC)$(CFLAG)$(DEFS)-fPIC$(INCLUDE)-c$<-共享-o$@
%.o:%.c$(CC)$(CFLAG)$(DEFS)-fPIC$(INCLUDE)-c$<-共享-o$@
.PHONY:全部
全部:PRN
HSCAN CDU UPS
PRNAPPS=bin/libpntest.so
PRN:$(PRNAPPS)
bin/libprtest.so:app/prn_proc.cpp app/prtest.cpp app/myCpp.pp$(CC)$(CFLAG)$(DEFS)$(PRNINC)$(PRSLIBS)$^-共享-o$@
dist:allmkdir-p insttestrm-rf insttest/*cp-一个bin insttest/cp-f Makefile指令/tar-czf inst-$(主要)$(MINOR).tgz insttest/rm-rf insttest
安装:install-m 755$(PRNAPPS)/usr/bin
cleanbak:查找-name*.o|xargs rm-f查找-名称*~|xargs rm-f查找-name*.bak|xargs rm-f查找-name*.orig|xargs rm-f查找-名称*.cpp|xargs chmod 644查找-name.h|xargs chmod 644chmod 644/etc-lib/gotlib
清洁:查找-name*.o|xargs rm-f查找-名称*~|xargs rm-f查找-name*.bak|xargs rm-f查找-name*.orig|xargs rm-f查找-名称*.cpp|xargs chmod 644查找-name*.h|xargs chmod 644rm-f$(PRNAPPS)$(SCANAPS)$(HSCANAPPS)$(UPSAPPS)$
帮助:echo"make style"echo"制作cleanbak"echo"make clean"echo"make"echo"make-dist"echo"make-install"