- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试开发一个使用 LibEvents 的 android native 胶水应用程序。
我从这里获得了一个 android 友好的 LibEvents 版本...... https://github.com/ventureresearch/libevent
我的 android.mk 文件几乎相同(除了相对路径)。
它成功编译为静态 库并链接到我自己的共享 库。但是,当我尝试执行时,我收到 Dalvik 的错误消息,指示它无法加载我的共享库。
E/AndroidRuntime(16123): Process: com.marty.socketclient1, PID: 16123
E/AndroidRuntime(16123): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.marty.socketclient1/android.app.NativeActivity}: java.lang.IllegalArgumentException: Unable to load native library: /data/app-lib/com.marty.socketclient1-1/libSocketClient1.so
如果我不使用我的 LibEvents 构建,我的 native 代码可以正常运行。另请注意,如果我从 LibEvents 中删除所有现有源文件并添加一个具有我自己的函数的新模块,只需在我的共享库中调用它,那么一切都会正常运行。
这使我相信它正在正确构建(或者至少编译/链接标志本身不会禁止加载)。
ndk-depends 报告没有额外的共享对象依赖项,因此我认为可能在执行 dlopen 时在 LibEvents 中执行了一些错误代码。
我尝试用 android 日志记录替换 LibEvents 日志记录机制,但我没有得到进一步的输出。
我也找不到任何出现的
__attribute__((__constructor__))
或
_init
在 LibEvents 源代码中。
请注意,LibEvents 只是“C”库,因此不能像 C++ 那样静态初始化对象(或者我的这个假设不正确?)。
还有其他我不知道的在加载时执行功能的方法吗?
我接下来可以检查什么?
我是否可以启用任何进一步的日志记录选项来提供进一步的洞察力?
我还将 android.mk 文件(如下所示)提取到最低限度,以便我可以调用:
evutil_make_socket_nonblocking()
并且仍然遇到无法加载库的问题。
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libevents
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := \
../evutil.c \
../event.c \
../log.c \
../evthread.c \
../evmap.c \
../signal.c \
../epoll.c \
../poll.c \
../evutil_rand.c \
../select.c
LOCAL_C_INCLUDES := \
$(LOCAL_PATH) \
$(LOCAL_PATH)/../android \
$(LOCAL_PATH)/../include
LOCAL_CFLAGS := -DHAVE_CONFIG_H -DANDROID -fvisibility=hidden
#LOCAL_CFLAGS := -DHAVE_CONFIG_H -DANDROID -DNDEBUG -fvisibility=hidden
include $(BUILD_STATIC_LIBRARY)
最佳答案
如果其他人遇到此问题,这里是解决方案。
这是一个漫长的过程,但我将函数和隔离模块 stub ,直到我可以只用一个源文件重现问题。然后我注释掉代码,直到我发现导致我的库无法加载的错误调用。
原来是这样的……
long _evutil_weakrand(void)
{
return random();
}
事实上,如果我创建了任何调用 random() 的函数,那么我的共享对象将无法加载。
显然这与android级别有关。您需要使用 19 级,我使用的是 21 级。
关于c++ - 安卓 NDK + LibEvents,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32983468/
这两个库都是为异步 I/O 调度而设计的,并且都在 Linux 上使用 epoll,在 FreeBSD 上使用 kqueue 等。 除了表面上的差异,我的意思是这两个库之间真正的差异是什么?关于架构,
假设我有 2 个正在监视事件的套接字,我真的希望套接字 1 成为首选(即使以耗尽套接字 2 为代价)。我如何用 libev 做到这一点(我问了关于 libuv 的同样问题 here 但看起来 libu
我想使用事件驱动库之一制作基本的聊天服务器。但是选择什么? libevent 或 libev 哪个更好?哪个有更好的 C++ 支持?哪个 rune 在 Windows 中更好?什么更快?更快地开发和理
我正在尝试监控一个 unix 套接字(“/tmp/mysocket”)。 我可以在 Node.js 中很好地做到这一点:当 1) 套接字被绑定(bind),2) 有人连接到套接字,3) 数据被发送到套
我正在尝试向后移植基于 libevent 的库以使用 ASIO 后端(从而避免在单个应用程序中出现多个事件循环)。还有其他方法可以解决“问题”,但我对这个感兴趣 我在 Boost::ASIO 文档中没
我目前正在使用libevent编写多线程应用程序。 某些事件是由IO触发的,但我需要使用event_active()由代码本身跨线程触发的几个事件。 我试图编写一个简单的程序来显示我的问题所在: 使用
我花了一些时间在互联网上搜索寻找更好的方法来分析和调试我的问题,但我似乎找不到解决方案。所以我想我会问。 简要地。我正在尝试创建一个非阻塞 ssl 转发代理。代理的服务器部分使用自签名服务器证书,我使
我有以下代码: #include #include #include #include #include void fd_cb(int fd,short event,void *arg){
我有几个关于 libevent2 及其多线程支持的问题。 libevent 是否支持多线程? 我想实现的是这样的: 在单个线程中创建一个 event_base。 在这个单线程中设置事件并将它们关联到事
我正在遵循this示例。 Line#37表示工作线程数应等于cpu核心数。为什么? 如果有1万个连接,而我的系统有8个核心,这是否意味着8个辅助线程将处理1万个连接?为什么我不应该增加这个数字? 最佳
我正在学习如何使用 Libevent。虽然我无法理解 pending 和 active 之间的区别。在我看来,当一个事件被添加到 event_base 并且事件还没有发生时,它就处于 pending
我想知道是否有关于如何编译 libev-dev 的说明在 Linux (CentOS) 64 位上。我找不到与 libev 相关的开发包,也找不到任何有关其编译的教程。p.s:请不要使用包管理器 -
我想知道是否有关于如何编译 libev-dev 的说明在 Linux (CentOS) 64 位上。我找不到与 libev 相关的开发包,也找不到任何有关其编译的教程。p.s:请不要使用包管理器 -
我正在学习 libev 并且偶然发现了这个问题。假设我想尽快处理某些事情,但不是现在(即不在当前执行函数中)。例如,我想将一些大型同步作业分成多个部分,这些部分将排队,以便其他回调可以在两者之间触发。
我有干净的centos6系统,尝试从源代码编译tor。第一种方式(通过 yum 安装 libevent)。我愿意: yum install libevent2 yum install libevent
我在代码中有结构指针 struct evkeyvalq *headers; 现在我调用一个函数,该函数将在结构中填充一些信息。 evhttp_parse_query(uri, headers) 我在这
Rant:我真的不喜欢 boost::asio,所以我一直在寻找替代方案并遇到了 libev。这对我来说似乎很简单,但正在做一些我无法理解的事情。如果一个线程中的问题太多,请告诉我。 1) 我将监听套
如果我们主要想要一个基于 epoll 的文件描述符循环,那么 libevent 还提供什么功能(对 http 或dns 东西)?? 我知道这是一个很大的项目,但对我来说编写一个 epoll 包装器 A
我在我的 Linux 'c' 应用程序中将 libev 用于计时器和 io 事件,我想将自定义数据与事件相关联。在 libev 文档中,它暗示了 associating custom data但没有给
在 C 中使用 libev 创建小型网络服务器时,在不阻塞 react 器的情况下提供文件服务(打开、就绪、写入套接字)的最佳策略是什么? 我有一些建议一次阅读几个区 block ,但我不确定这是正确
我是一名优秀的程序员,十分优秀!