我正在尝试直接在android上执行一个简单的C程序。
int main(int argc, char *argv[]) {
void *Mylib = dlopen("path/to/some/so/library", RTLD_NOW);
if (!Mylib) {
fputs (dlerror(), stderr);
exit(1);
}
return 0;
}
我用Android.mk构建这个唱NDK:
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS)
LOCAL_CFLAGS +=-fPIE
LOCAL_LDFLAGS += -fPIE -pie
LOCAL_MODULE := hello
LOCAL_LDLIBS += -llog -ldl
include $(BUILD_EXECUTABLE)
但是加载lib后我得到了这个
dlopen失败:库“libvendorconn.so”未找到1 |
显然我试图打开的lib需要一个ohter库(libvendorconn.so不知道它在哪里)可能是系统中某处的默认android lib?
有没有办法解决这个问题?如果需要,Pheraps在构建时指示NDK使用系统库?
答案 0 :(得分:0)
您应该能够dlopen("libvendorconn.so", RTLD_NOW)
,加载程序会尝试在默认搜索路径中找到它。
Android的旧版本有一个加载程序,需要您按照特定的顺序加载库才能使其正常工作。在Java中,解决此问题的最佳方法是使用ReLinker,但这不会帮助您获得纯本机二进制文件。 NDK发布ndk-depends
(显然没有文件记录)可以帮助解决这个问题。