使用JNA从java中的源对象(.so)文件内部调用C++函数时发生链接异常



我正在尝试从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$&lt-共享-o$@

%.o:%.c$(CC)$(CFLAG)$(DEFS)-fPIC$(INCLUDE)-c$&lt-共享-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"

最新更新