我正在为本机libopenocf.so(在C中)构建Flutter插件。我写了一个JNI包装器libopenocflutter.so,它链接到libopenocf.so。构建工作并将所有共享库放置在apk中的正确位置。但是,从libopenocflutter.so到libopenocf.so的链接是开发环境的绝对路径,因此,当我从Java加载libopenocflutter.so时,我得到了dlopen错误lib。
例如,我尝试根据自己从谷歌搜索中发现的内容在CMakeLists.txt中使用各种RPATH指令
add_library(openocflib已共享导入)
set_target_properties(openocflib属性IMPORTED_LOCATION
“ $ {distribution_DIR} / openocf / lib / $ {ANDROID_ABI} /libopenocf.so”)
SET(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
SET(CMAKE_INSTALL_RPATH“ $ ORIGIN :::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::::“)SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH FALSE)
add_library(openocflutter已共享... c文件...)
target_link_libraries(openocflutter openocflib android日志)
我尝试了许多变体,但没有任何效果。链接总是这样结束(来自readelf -d):
0x0000000000000001(需要)共享库:[/ Users / gar / openocflutter / android / src / main / cpp /../../../ libs / openocf / lib / arm64-v8a / libopenocf.so] < / p>
...
0x000000000000000e(SONAME)库soname:[libopenocflutter.so]
有人知道这个秘密吗?
谢谢
格雷格