2014-08-27 55 views
0

我想從Java(JNA)中的C++ .so文件訪問函數。我可以從這個.so文件中調用簡單的「Hello」類型的函數。但是,當我試圖訪問其他文件(C語言編寫的.so文件)內部調用其他函數時,我遇到了以下異常: 線程「main」中的異常java.lang.UnsatisfiedLinkError:/ home/stpl /workspace/TestJNA/bin/libhello.so:undefined symbol:PInit在Java中使用JNA從源對象(.so)文件中調用C++函數時發生鏈接異常。

我困在這裏。任何幫助將不勝感激。

+0

好,。所以應該是短期的共享對象。你的標題說JNA。我認爲粘貼一些相關的代碼是一個好主意。 – HuStmpHrrr 2014-08-27 13:59:51

+0

那麼它是什麼調用C或C++?這些是不同的語言。 – 2014-08-27 14:17:31

+0

@ JensGustedt-我正在調用C++函數,並且C++函數正在調用C中庫的函數。 – DpkTheJavaCoder 2014-08-28 04:43:04

回答

0

現在我的問題解決了。 如果有人遇到同樣的問題,問題出在.so文件中。 以下是用於創建.so文件的.mk文件的腳本。

CC =克++ CFLAG = -g -O0

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

的astyle =的astyle ASTYLEFLAGS = --style = ANSI -t -p -b -S -K

compiledate = $(殼日期 '+%F%T') DEFS = -D DEFINE_MKDATE =「\ 「$(編輯)\」「

INC_PUB = -I./Inclu德-I./PRT.IF -I./SCANNER.IF -I ./Include INCLUDE = $(INC_PUB)

%的.o:%的.cpp $(CC)$(CFLAG)$(DEFS )-fPIC $(含)-C $ < -shared -o $ @

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

.PHONY:所有
所有:PRN

HSCAN CDU UPS

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

斌/ libprntest.so:應用程序/ prn_proc.cpp應用程序/ prntest.cpp應用程序/ myCpp.cpp $(CC)$(CFLAG )$(DEFS)$(PRNINC)$(PRNLIBS)$^-o -shared $ @

DIST:所有 的mkdir -p insttest 室射頻insttest/* CP -a斌insttest/ CP - f Makefile inst/ tar -czf inst - $(MAJOR)。$(MINOR).tgz insttest/ rm -rf insttest

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

cleanbak: 找到。 -name * .o | xargs rm -f 找到。 -name *〜| xargs rm -f 找到。 -name * .bak | xargs rm -f 找到。 -name * .orig | xargs rm -f 找到。 -name * .cpp | xargs chmod 644 查找。 -name .h | xargs chmod 644 chmod 644 ./etc-lib/gotlib。

clean: 找到。 -name * .o | xargs rm -f 找到。 -name *〜| xargs rm -f 找到。 -name * .bak | xargs rm -f 找到。 -name * .orig | xargs rm -f 找到。 -name * .cpp | xargs chmod 644 查找。 -name是* .h | xargs的文件模式644 RM -f $(PRNAPPS)$(SCANAPPS)$(HSCANAPPS)$(UPSAPPS)$(CDUAPPS)$(HARDWAREAPPS)$(CMOSAPPS)$(TOOLSAPPS)

幫助: 回聲「讓風格」 回聲「讓cleanbak」 回聲「使清潔」 回聲「做」 回聲「讓DIST」 回聲「讓安裝」

相關問題