LINUX JNI C++ 第三方动态链接库so 提示在此作用域中尚未声明

C语言 码拜 9年前 (2015-07-10) 1942次浏览 0个评论
 

首先对自己编写的Hello.cpp编译成so
g++ -fPIC -D_REENTRANT -I/usr/jdk1.8/include -I/usr/jdk1.8/include/linux -c Hello.cpp
g++ -shared Hello.o -o libHello.so
然后因为Hello.cpp调用了第三方库,所以进行了以下关联。
g++ Hello.cpp -fPIC -shared -L. -lVerifyResult

我这么编译为什么总是提示我 ‘_InitInfo’在此作用域中尚未声明

其中 VerifyResult是第三方库,_InitInfo是第三方库提供的对外接口
Hello.cpp是我自己编写的C++程序,内容是调用 libVerifyResult.so 中提供的函数

另外,我已经将libVerifyResult.so放到了当前目录,并且在/usr/lib下也放置了。

16分

使用nm命令看看libHello.so里面的符号是不是对
先确保带有main函数的Hello.cpp可以调用第三方库
 
引用 1 楼 thefirstz 的回复:

使用nm命令看看libHello.so里面的符号是不是对
先确保带有main函数的Hello.cpp可以调用第三方库

是这样的,我通过C++程序直接调用SO,是没问题的,现在我需要在写个C++程序,但是要符合JNI规范,目的上让JAVA调用。

我觉得我是编译哪里有了问题。

 
关键的问题是,我如何与第三方提供的SO建立关联。

16分

system.load(libxxx.so);
 
引用 4 楼 OExpress 的回复:

system.load(libxxx.so);

我单独百年些CPP成寻,调用这个库,是没有问题的,而且直接可以用,也不需要什么load,open之类的,现在我是
要通过JNI方式调用,现在就是不知到编译的时候,依赖关系怎么写。查了下,也实验了。就是不行

 
今天最后一顶
 
不能解决的话,今天准备结贴了。

16分

在cpp文件里include头文件,然后使用dlopen试试吧

16分

http://baike.baidu.com/link url=miZhS63xkMQgqq-7A5WGvjcaCnxq-R4ZJTS0M7tXnXyv4lqly73D-Vqz4B0Xcz25Iwkf2oVpDpCPn3D8phiYFa
 
引用 9 楼 buyong 的回复:

http://baike.baidu.com/link url=miZhS63xkMQgqq-7A5WGvjcaCnxq-R4ZJTS0M7tXnXyv4lqly73D-Vqz4B0Xcz25Iwkf2oVpDpCPn3D8phiYFa

这是基本的,我需要咨询的是,可能是我在编译的时候,尤其是依赖关系上,哪个参数没有些对造成的。
首先对自己编写的Hello.cpp编译成so
g++ -fPIC -D_REENTRANT -I/usr/jdk1.8/include -I/usr/jdk1.8/include/linux -c Hello.cpp
g++ -shared Hello.o -o libHello.so
然后因为Hello.cpp调用了第三方库,所以进行了以下关联。
g++ Hello.cpp -fPIC -shared -L. -lVerifyResult

我这么编译为什么总是提示我 ‘_InitInfo’在此作用域中尚未声明

其中 VerifyResult是第三方库,_InitInfo是第三方库提供的对外接口
Hello.cpp是我自己编写的C++程序,内容是调用 libVerifyResult.so 中提供的函数

另外,我已经将libVerifyResult.so放到了当前目录,并且在/usr/lib下也放置了。


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明LINUX JNI C++ 第三方动态链接库so 提示在此作用域中尚未声明
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!