2017-08-03 1 views
0

libmbc.soというオープンソースの共有ライブラリがあります。私はすでにCでテストされた動作を再現できるはずのJava実装でこのライブラリを使用することに興味があります+ +。理想的には、私はこのライブラリのMBCNodalというクラスにアクセスし、そのメンバー関数をJavaラッパーで呼び出すことを目指しています。 は、私がnm -gC libmbc.soと共有ライブラリの内容をアンロールした場合、私は次のようjnaラッピング共有.soライブラリ - アクセスクラス

    U [email protected]@GLIBC_2.2.5 
       U [email protected]@GLIBC_2.2.5 
000000000020e278 B __bss_start 
       U [email protected]@GLIBC_2.2.5 
       U [email protected]@GLIBC_2.2.5 
       w [email protected]@GLIBC_2.2.5 
       U [email protected]@CXXABI_1.3 
       U [email protected]@CXXABI_1.3 
000000000020e278 D _edata 
000000000020e280 B _end 
       U [email protected]@GLIBC_2.2.5 
0000000000009ab0 T _fini 
       U [email protected]@GLIBC_2.2.5 
       U [email protected]@GLIBC_2.2.5 
       U [email protected]@GLIBC_2.2.5 
       U [email protected]@GLIBC_2.2.5 
       U [email protected]@GLIBC_2.2.5 
       w __gmon_start__ 
       U [email protected]@CXXABI_1.3 
0000000000003db8 T _init 
       w _ITM_deregisterTMCloneTable 
       w _ITM_registerTMCloneTable 
       w _Jv_RegisterClasses 
       U [email protected]@GLIBC_2.2.5 
0000000000004670 T mbc_check_cmd 
000000000020e27c B mbc_dummy 
00000000000046c0 T mbc_get_cmd 
0000000000004850 T mbc_inet_init 
0000000000005f60 T mbc_modal_destroy 
0000000000005690 T mbc_modal_get_motion 
0000000000005a40 T mbc_modal_init 
0000000000005b90 T mbc_modal_negotiate_request 
0000000000005db0 T mbc_modal_negotiate_response 
00000000000058d0 T mbc_modal_put_forces 
00000000000055d0 T mbc_nodal_destroy 
0000000000004970 T mbc_nodal_get_motion 
0000000000004c30 T mbc_nodal_init 
00000000000051d0 T mbc_nodal_negotiate_request 
00000000000053f0 T mbc_nodal_negotiate_response 
0000000000004b30 T mbc_nodal_put_forces 
0000000000004720 T mbc_put_cmd 
00000000000048f0 T mbc_unix_init 
00000000000097a0 T mbdyn_host2inet_addr 
0000000000009980 T mbdyn_make_inet_socket 
0000000000009890 T mbdyn_make_inet_socket_type 
0000000000009aa0 T mbdyn_make_named_socket 
00000000000099a0 T mbdyn_make_named_socket_type 
       U [email protected]@GLIBC_2.2.5 
       U [email protected]@GLIBC_2.2.5 
       U [email protected]@GLIBC_2.2.5 
       U [email protected]@GLIBC_2.2.5 
       U [email protected]@GLIBC_2.2.5 
       U [email protected]@GLIBC_2.2.5 
       U [email protected]@GLIBC_2.2.5 
       U [email protected]@GLIBC_2.2.5 
       U [email protected]@GLIBC_2.2.5 
       U [email protected]@GCC_3.0 
       U [email protected]@GLIBC_2.2.5 
       U operator delete(void*, unsigned long)@@CXXABI_1.3.9 
0000000000006000 T MBCBase::SetTimeout(int) 
0000000000006010 T MBCBase::SetVerbose(bool) 
0000000000007710 T MBCBase::DynamicsLabel() 
0000000000006020 T MBCBase::SetDataAndNext(bool) 
0000000000007a20 T MBCBase::F(unsigned char) 
0000000000007bf0 T MBCBase::M(unsigned char) 
00000000000064b0 T MBCBase::Init(char const*) 
0000000000006510 T MBCBase::Init(char const*, unsigned short) 
00000000000062b0 T MBCBase::SetStatus(MBCBase::Status) 
00000000000063e0 T MBCBase::MBCBase() 
00000000000063e0 T MBCBase::MBCBase() 
0000000000006490 T MBCBase::~MBCBase() 
0000000000006400 T MBCBase::~MBCBase() 
0000000000006400 T MBCBase::~MBCBase() 
0000000000009310 T MBCModal::Initialize(MBCBase::Rot, unsigned int) 
0000000000009490 T MBCModal::DynamicsLabel() 
00000000000094b0 T MBCModal::F(unsigned char) 
00000000000094d0 T MBCModal::M(unsigned char) 
0000000000009730 T MBCModal::P(unsigned int) 
00000000000093a0 T MBCModal::MBCModal(MBCBase::Rot, unsigned int) 
00000000000092c0 T MBCModal::MBCModal() 
00000000000093a0 T MBCModal::MBCModal(MBCBase::Rot, unsigned int) 
00000000000092c0 T MBCModal::MBCModal() 
0000000000006470 T MBCModal::~MBCModal() 
0000000000006450 T MBCModal::~MBCModal() 
0000000000006450 T MBCModal::~MBCModal() 
0000000000007d40 T MBCNodal::Initialize(MBCBase::Rot, unsigned int, bool, MBCBase::Rot, bool) 
0000000000008e60 T MBCNodal::DynamicsLabel(unsigned int) 
0000000000007f20 T MBCNodal::DynamicsLabel() 
0000000000007f40 T MBCNodal::F(unsigned char) 
0000000000009110 T MBCNodal::F(unsigned int, unsigned char) 
0000000000007f60 T MBCNodal::M(unsigned char) 
0000000000009220 T MBCNodal::M(unsigned int, unsigned char) 
0000000000007e00 T MBCNodal::MBCNodal(MBCBase::Rot, unsigned int, bool, MBCBase::Rot, bool) 
0000000000007cf0 T MBCNodal::MBCNodal() 
0000000000007e00 T MBCNodal::MBCNodal(MBCBase::Rot, unsigned int, bool, MBCBase::Rot, bool) 
0000000000007cf0 T MBCNodal::MBCNodal() 
0000000000006430 T MBCNodal::~MBCNodal() 
0000000000006410 T MBCNodal::~MBCNodal() 
0000000000006410 T MBCNodal::~MBCNodal() 
00000000000077c0 T MBCBase::GetRefNodeF() const 
0000000000007870 T MBCBase::GetRefNodeM() const 
0000000000006780 T MBCBase::GetRefNodeR() const 
00000000000066d0 T MBCBase::GetRefNodeX() const 
0000000000006050 T MBCBase::bDataAndNext() const 
0000000000006a20 T MBCBase::GetRefNodeXP() const 
0000000000007660 T MBCBase::DynamicsLabel() const 
0000000000006100 T MBCBase::GetRefNodeRot() const 
0000000000006bb0 T MBCBase::GetRefNodeXPP() const 
0000000000006150 T MBCBase::bAccelerations() const 
0000000000006ad0 T MBCBase::GetRefNodeOmega() const 
0000000000006860 T MBCBase::GetRefNodeTheta() const 
0000000000006620 T MBCBase::KinematicsLabel() const 
0000000000006c90 T MBCBase::GetRefNodeOmegaP() const 
0000000000006940 T MBCBase::GetRefNodeEuler123() const 
0000000000007950 T MBCBase::F(unsigned char) const 
0000000000007af0 T MBCBase::M(unsigned char) const 
0000000000006e60 T MBCBase::R(unsigned char, unsigned char) const 
0000000000006d90 T MBCBase::X(unsigned char) const 
00000000000075b0 T MBCBase::GetRefNodeDynamicsLabel() const 
00000000000065a0 T MBCBase::GetRefNodeKinematicsLabel() const 
00000000000071b0 T MBCBase::XP(unsigned char) const 
0000000000007380 T MBCBase::XPP(unsigned char) const 
0000000000007280 T MBCBase::Omega(unsigned char) const 
0000000000006fb0 T MBCBase::Theta(unsigned char) const 
0000000000006580 T MBCBase::GetCmd() const 
0000000000006080 T MBCBase::GetRot() const 
0000000000007480 T MBCBase::OmegaP(unsigned char) const 
0000000000006190 T MBCBase::bLabels() const 
00000000000060c0 T MBCBase::bRefNode() const 
0000000000006030 T MBCBase::bVerbose() const 
00000000000070b0 T MBCBase::Euler123(unsigned char) const 
0000000000006070 T MBCBase::GetStatus() const 
0000000000005fd0 T MBCModal::GetBasePtr() const 
0000000000009480 T MBCModal::DynamicsLabel() const 
0000000000005fe0 T MBCModal::GetRefNodePtr() const 
00000000000093f0 T MBCModal::KinematicsLabel() const 
00000000000094a0 T MBCModal::F(unsigned char) const 
00000000000094c0 T MBCModal::M(unsigned char) const 
00000000000096c0 T MBCModal::P(unsigned int) const 
00000000000095a0 T MBCModal::Q(unsigned int) const 
0000000000009410 T MBCModal::R(unsigned char, unsigned char) const 
0000000000009400 T MBCModal::X(unsigned char) const 
0000000000009600 T MBCModal::QP(unsigned int) const 
0000000000009440 T MBCModal::XP(unsigned char) const 
0000000000009460 T MBCModal::XPP(unsigned char) const 
0000000000009670 T MBCModal::GetP() const 
0000000000009520 T MBCModal::GetQ() const 
00000000000063a0 T MBCModal::Close() const 
0000000000009560 T MBCModal::GetQP() const 
0000000000009450 T MBCModal::Omega(unsigned char) const 
0000000000009420 T MBCModal::Theta(unsigned char) const 
0000000000009470 T MBCModal::OmegaP(unsigned char) const 
0000000000005ff0 T MBCModal::GetType() const 
0000000000009430 T MBCModal::Euler123(unsigned char) const 
00000000000094e0 T MBCModal::GetModes() const 
0000000000006280 T MBCModal::GetMotion() const 
0000000000006350 T MBCModal::Negotiate() const 
0000000000006240 T MBCModal::PutForces(bool) const 
0000000000005fa0 T MBCNodal::GetBasePtr() const 
0000000000008af0 T MBCNodal::GetEuler123(unsigned int) const 
0000000000008140 T MBCNodal::GetEuler123() const 
0000000000008dd0 T MBCNodal::DynamicsLabel(unsigned int) const 
0000000000007f10 T MBCNodal::DynamicsLabel() const 
0000000000005fb0 T MBCNodal::GetRefNodePtr() const 
0000000000008910 T MBCNodal::KinematicsLabel(unsigned int) const 
0000000000007e80 T MBCNodal::KinematicsLabel() const 
0000000000008d60 T MBCNodal::GetDynamicsLabel() const 
0000000000008880 T MBCNodal::GetKinematicsLabel(unsigned int) const 
0000000000007fb0 T MBCNodal::GetKinematicsLabel() const 
0000000000007f30 T MBCNodal::F(unsigned char) const 
00000000000090a0 T MBCNodal::F(unsigned int, unsigned char) const 
0000000000007f50 T MBCNodal::M(unsigned char) const 
0000000000009180 T MBCNodal::M(unsigned int, unsigned char) const 
0000000000007ea0 T MBCNodal::R(unsigned char, unsigned char) const 
00000000000083d0 T MBCNodal::R(unsigned int, unsigned char, unsigned char) const 
0000000000007e90 T MBCNodal::X(unsigned char) const 
0000000000008360 T MBCNodal::X(unsigned int, unsigned char) const 
0000000000007ed0 T MBCNodal::XP(unsigned char) const 
0000000000008600 T MBCNodal::XP(unsigned int, unsigned char) const 
0000000000007ef0 T MBCNodal::XPP(unsigned char) const 
0000000000008710 T MBCNodal::XPP(unsigned int, unsigned char) const 
0000000000008fa0 T MBCNodal::GetF(unsigned int) const 
0000000000008ef0 T MBCNodal::GetF() const 
0000000000009010 T MBCNodal::GetM(unsigned int) const 
0000000000008f30 T MBCNodal::GetM() const 
00000000000089f0 T MBCNodal::GetR(unsigned int) const 
0000000000008060 T MBCNodal::GetR() const 
00000000000089a0 T MBCNodal::GetX(unsigned int) const 
0000000000008020 T MBCNodal::GetX() const 
0000000000006310 T MBCNodal::Close() const 
0000000000008b70 T MBCNodal::GetXP(unsigned int) const 
00000000000081b0 T MBCNodal::GetXP() const 
0000000000007ee0 T MBCNodal::Omega(unsigned char) const 
0000000000008670 T MBCNodal::Omega(unsigned int, unsigned char) const 
0000000000007eb0 T MBCNodal::Theta(unsigned char) const 
00000000000084a0 T MBCNodal::Theta(unsigned int, unsigned char) const 
0000000000008c40 T MBCNodal::GetXPP(unsigned int) const 
0000000000008260 T MBCNodal::GetXPP() const 
0000000000007f00 T MBCNodal::OmegaP(unsigned char) const 
00000000000087b0 T MBCNodal::OmegaP(unsigned int, unsigned char) const 
0000000000005fc0 T MBCNodal::GetType() const 
0000000000007ec0 T MBCNodal::Euler123(unsigned char) const 
0000000000008550 T MBCNodal::Euler123(unsigned int, unsigned char) const 
0000000000007f70 T MBCNodal::GetNodes() const 
0000000000008bc0 T MBCNodal::GetOmega(unsigned int) const 
00000000000081f0 T MBCNodal::GetOmega() const 
0000000000008a70 T MBCNodal::GetTheta(unsigned int) const 
00000000000080d0 T MBCNodal::GetTheta() const 
0000000000006210 T MBCNodal::GetMotion() const 
0000000000008cc0 T MBCNodal::GetOmegaP(unsigned int) const 
00000000000082d0 T MBCNodal::GetOmegaP() const 
00000000000062c0 T MBCNodal::Negotiate() const 
00000000000061d0 T MBCNodal::PutForces(bool) const 
000000000020dc48 V typeinfo for MBCBase 
000000000020dc70 V typeinfo for MBCModal 
000000000020dc58 V typeinfo for MBCNodal 
000000000000b468 V typeinfo name for MBCBase 
000000000000b488 V typeinfo name for MBCModal 
000000000000b478 V typeinfo name for MBCNodal 
000000000020dc88 V vtable for MBCBase 
000000000020dd38 V vtable for MBCModal 
000000000020dce0 V vtable for MBCNodal 
       U vtable for __cxxabiv1::[email protected]@CXXABI_1.3 
       U vtable for __cxxabiv1::[email protected]@CXXABI_1.3 

を得るため、私はMBCNodalクラスは何とかJNAでアクセス可能であることを感じています。しかし、私はどのように把握することはできませんか?

私はライブラリの実装を変更しないことを望みます。私は.hと.cppの両方のソースコードを持っています。しかし、私はlibmbc.soを生成するためにどのようにコンパイルされたのか分かりません。

ご協力いただきありがとうございます。

編集:ここ

は、私は、ライブラリをロードし、EXTERNメソッドにアクセスする方法のサンプルコードです:

private interface Wrapper extends Library { 

     Wrapper INSTANCE = Native.loadLibrary(C_LIBRARY_PATH, Wrapper.class); 

     Pointer mbc_nodal_init(Pointer ptr, int refnode, int nodes, int label, int rot, int accels); 

     int mbc_nodal_get_motion(Pointer ptr); 

     int mbc_nodal_negotiate_request(Pointer ptr); 

     int mbc_nodal_put_forces(Pointer ptr, int converged); 


    } 

答えて

0

あなたはアダプタとしてJNIを使​​用することができます。

これらの2つのサンプルをご覧ください。私は、これはあなたが探しているものだと思います。どちらの場合も

http://jnicookbook.owsiak.org/recipe-No-021/

http://jnicookbook.owsiak.org/recipe-No-023/

、あなたがJNIコードもちろん

enter image description here

によって適応されるコードを持って、あなたは正しくJavaのデータをマッピングすることを確認する必要があります.soベースの関数で必要とされるものまで。

JNAについては、非常に包括的なチュートリアルサイトがここにあります:

http://www.eshayne.com/jnaex/index.html

+0

私の問題は、ライブラリのメソッドにアクセスすることはなく、編集に示すように、これは理解されています。しかし、私の難しさは、クラスMBCNodalとそのメンバ関数にアクセスすることです。私はJNIを使​​う必要がない方がいいです。 – Yvus

+0

これは多分あなたを助けるでしょう:https://github.com/mkowsiak/jnicookbook/tree/master/recipeNo025 – mko

+0

はい、まさに私はJavaのSimpleクラスにアクセスしたいが、残念なことにJavaの実装は参照をしませんこのクラス? – Yvus

関連する問題