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

标签 java c++ c java-native-interface shared-libraries

我正在尝试从 java(JNA) 中的 c++ .so 文件访问函数。我可以从此 .so 文件调用简单的“Hello”类型函数。但是当我尝试访问内部调用其他文件(用 C 编写的 .so 文件)的函数的其他函数时,我收到如下异常: 线程“main”中的异常 java.lang.UnsatisfiedLinkError:/home/stpl/workspace/TestJNA/bin/libhello.so: undefined symbol : PInit

我陷入了困境。任何帮助将不胜感激。

最佳答案

现在我的问题已经解决了。 如果有人遇到同样的问题,问题出在 .so 文件中。 下面是.mk文件创建.so文件的脚本。

CC=g++ CFLAG= -g -O0

PRNINC= -I ./包含 -I ./PRT.IF -I./app PRNLIBS= -lHWIGotPrinter -lcommon -lpthread -ldl

ASTYLE=astyle ASTYLEFLAGS= --style=ansi -t -p -b -S -K

compiledate=$(shell 日期 '+%F %T') DEFS=-D DEFINE_MKDATE="\"$(编译)\""

INC_PUB= -I./包含 -I./PRT.IF -I./SCANNER.IF -I ./包含 包括=$(INC_PUB)

%.o:%.cpp $(CC) $(CFLAG) $(DEFS) -fPIC $(INCLUDE) -c $< -shared -o $@

%.o: %.c $(CC) $(CFLAG) $(DEFS) -fPIC $(INCLUDE) -c $< -shared -o $@

.PHONY:全部
全部:PRN

HSCAN CDU UPS

PRNAPPS= bin/libprntest.so
PRN:$(PRNAPPS)

bin/libprntest.so:app/prn_proc.cpp app/prntest.cpp app/myCpp.cpp $(CC) $(CFLAG) $(DEFS) $(PRNINC) $(PRNLIBS) $^ -共享 -o $@

距离:全部 mkdir -p 安装测试 rm -rf 安装测试/* cp -a bin insttest/ cp -f Makefile 安装/ tar -czf inst-$(MAJOR).$(MINOR).tgz insttest/ rm -rf 安装测试

安装: 安装-m 755 $(PRNAPPS)/usr/bin

清理: 寻找 。 -名称 *.o |xargs rm -f 寻找 。 -名称 *~ |xargs rm -f 寻找 。 -名称 *.bak |xargs rm -f 寻找 。 -名称 *.orig |xargs rm -f 寻找 。 -名称 *.cpp |xargs chmod 644 寻找 。 -name .h |xargs chmod 644 chmod 644 ./etc-lib/gotlib.

干净: 寻找 。 -名称 *.o |xargs rm -f 寻找 。 -名称 *~ |xargs rm -f 寻找 。 -名称 *.bak |xargs rm -f 寻找 。 -名称 *.orig |xargs rm -f 寻找 。 -名称 *.cpp |xargs chmod 644 寻找 。 -名称 *.h |xargs chmod 644 rm -f $(PRNAAPPS) $(SCANAPPS) $(HSCANAPPS) $(UPSAPPS) $(CDUAPPS) $(HARDWAREAPPS) $(CMOSAPPS) $(TOOLSAPPS)

帮助: 回显“打造风格” 回声“make cleanbak” 回声“清理干净” 回声“使” 回声“制作距离” 回显“进行安装”

关于java - 使用 JNA 从 java 中的内部源对象 (.so) 文件调用 C++ 函数时出现链接异常。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25529120/

相关文章:

java - iOs 表情符号在使用 java 的推送通知中显示为 Unicode 字符

c++ - 为什么找不到这些符号?

c - 使用 posix_spawn 设置 euid

C 宏包装

java - 从短链接获取 youtube 重定向链接

java - 当两者的输出相同时,为什么我的 if/else 语句不匹配?

java - Quartz 作业是否在同一个 JVM 中以自己的线程运行?

c++ - Qt Gridlayout 不重新对齐 GUI 元素

c++ - 检查未完全填充的数组中的字符是否为空

c - 无法在 C 循环外释放指针?