问题描述
我需要配置“ bacnet-stack-0-8-0”项目以与JNI一起使用时需要帮助。 提到的项目是一个开源项目,我感兴趣的子项目是/ demo / gateway:
http://svn.code.sf.net/p/bacnet/code/branches/releases/bacnet-stack-0-8-0/
为了进行测试,我向上述项目中添加了HelloJNI.c文件,仅使用该文件创建了该项目(使用makefile),并成功从Java代码调用了sayHello()函数,但是当我尝试添加sayHello时()将JNI函数添加到demo / gateway / main.c,使项目失败,并显示以下错误:
/ usr / bin / ld:../../lib/libbacnet.a(bvlc.o):制作共享库时,不能使用符号'bvlc_send_mpdu'的重定位R_X86_64_PC32;用-fPIC
重新编译 / usr / bin / ld:最终链接失败:值错误 collect2:错误:ld返回1退出状态 Makefile:65:目标'libmynativelib.so'的配方失败
demo / gateway / main.c:
#include "jni.h"
#include "HelloJNI.h"
#include ...
//code...
JNIEXPORT void JNICALL Java_HelloJNI_sayHello(jnienv *env,jobject thisObj) {
printf("Hello World - From my C project!\n");
return;
}
/** Main function of server demo.
*
* @see Device_Set_Object_Instance_Number,dlenv_init,Send_I_Am,* datalink_receive,npdu_handler,* dcc_timer_seconds,bvlc_maintenance_timer,* Load_Control_State_Machine_Handler,handler_cov_task,* tsm_timer_milliseconds
*
* @param argc [in] Arg count.
* @param argv [in] Takes one argument: the Device Instance #.
* @return 0 on success.
*/
int main(
int argc,char *argv[])
{
BACNET_ADDRESS src = {
0
}; /
...
网关makefile:
#Makefile to build BACnet Gateway Demonstration Application for the Linux Port
# tools - only if you need them.
# Most platforms have this already defined
# CC = gcc
#CC = gcc -fPIC -shared -I $(JAVA_HOME)/include -I $(JAVA_HOME)/include/linux -I /home/rami/eclipse-workspace/ForTests/src/tests/ -o /home/rami/eclipse-workspace/ForTests/src/tests/mynativelib.so
# Executable file name
TARGET = bacgateway
#TARGET_EXT=.so
TARGET_SO=libmynativelib.so
LDFLAGS=-shared
INCLUDES_JNI=-I $(JAVA_HOME)/include -I $(JAVA_HOME)/include/linux -I /home/rami/eclipse-workspace/ForTests/src/
TARGET_BIN = ${TARGET}$(TARGET_EXT)
# put any overloaded or special built src files here,# so the linker uses these instead of the functions in the library
SRCS = main.c \
HelloJNI.c \
$(BACNET_OBJECT)/gw_device.c \
$(BACNET_HANDLER)/h_routed_npdu.c \
$(BACNET_HANDLER)/s_router.c \
$(BACNET_OBJECT)/device.c \
$(BACNET_OBJECT)/ai.c \
$(BACNET_OBJECT)/ao.c \
$(BACNET_OBJECT)/av.c \
$(BACNET_OBJECT)/bi.c \
$(BACNET_OBJECT)/bo.c \
$(BACNET_OBJECT)/bv.c \
$(BACNET_OBJECT)/csv.c \
$(BACNET_OBJECT)/lc.c \
$(BACNET_OBJECT)/lsp.c \
$(BACNET_OBJECT)/ms-input.c \
$(BACNET_OBJECT)/mso.c \
$(BACNET_OBJECT)/msv.c \
$(BACNET_OBJECT)/nc.c \
$(BACNET_OBJECT)/osv.c \
$(BACNET_OBJECT)/piv.c \
$(BACNET_OBJECT)/schedule.c \
$(BACNET_OBJECT)/trendlog.c \
$(BACNET_OBJECT)/bacfile.c
OBJS = ${SRCS:.c=.o}
DEFInes += -DBAC_ROUTING
CFLAGS = $(WARNINGS) $(DEBUGGING) $(OPTIMIZATION) $(STANDARDS) $(INCLUDES) $(INCLUDES_JNI) $(DEFInes) -g
#all: ${BACNET_LIB_TARGET} Makefile ${TARGET_BIN}
all: ${BACNET_LIB_TARGET} Makefile ${TARGET_SO}
${TARGET_SO}: ${OBJS} Makefile ${BACNET_LIB_TARGET}
${CC} -fPIC ${PFLAGS} ${CFLAGS} ${OBJS} ${LFLAGS} ${LDFLAGS} -o $@
size $@
${TARGET_BIN}: ${OBJS} Makefile ${BACNET_LIB_TARGET}
${CC} ${PFLAGS} ${OBJS} ${LFLAGS} -o $@
size $@
cp $@ ../../bin
lib: ${BACNET_LIB_TARGET}
${BACNET_LIB_TARGET}:
( cd ${BACNET_LIB_DIR} ; $(MAKE) clean ; $(MAKE) )
.c.o:
${CC} -c ${CFLAGS} $*.c -o $@
depend:
rm -f .depend
${CC} -MM ${CFLAGS} *.c >> .depend
clean:
rm -f core ${TARGET_BIN} ${OBJS} ${BACNET_LIB_TARGET} $(TARGET).map
#rm -f $(OBJS) $(TARGET_SO)
include: .depend
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)