• android移植dbus


    前言

    车载项目需要移植dbus到android系统中

    移植

    编译dbus源码
    sudo apt-get install libtool
    
    ./autogen.sh
    ./configure --prefix=build
    make
    make install
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    移植错误汇总

    fatal error: 'Windows.h' file not found 
    解决:
    apt-get install mingw-w64
    
    • 1
    • 2
    • 3
    No need to regenerate ninja file
    Starting ninja...
    FAILED: ninja: 'external/dbus-1.15.8/dbus/dbus-socket-set.c', needed by 'out/target/product/trinket/obj/SHARED_LIBRARIES/libdbus_intermediates/dbus-socket-set.o', missing and no known rule to make it
    10:48:19 ninja failed with: exit status 1
    
    • 1
    • 2
    • 3
    • 4

    最新的dbus 中dbus没有dbus-socket-set.c

    No need to regenerate ninja file
    Starting ninja...
    FAILED: ninja: 'external/dbus-1.15.8/dbus/dbus-socket-set-poll.c', needed by 'out/target/product/trinket/obj/SHARED_LIBRARIES/libdbus_intermediates/dbus-socket-set-poll.o', missing and no known rule to make it
    10:57:36 ninja failed with: exit status 1
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    最新的dbus 中dbus没有dbus-socket-set-poll.c

    In file included from external/dbus-1.15.8/dbus/dbus-sha.c:27:
    In file included from external/dbus-1.15.8/dbus/dbus-internals.h:33:
    external/dbus-1.15.8/dbus/../dbus/dbus-types.h:33:10: fatal error: 'dbus/dbus-arch-deps.h' file not found
    #include 
             ^~~~~~~~~~~~~~~~~~~~~~~
    1 error generated.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    将dbus编译生成的.h文件copy到dbus

    external/dbus-1.15.8/dbus/dbus-sysdeps-unix.c:78:10: fatal error: 'execinfo.h' file not found
    #include 
    
    • 1
    • 2

    解决:

    config.h 中注释掉宏控
    /* Define to 1 if you have backtrace(). */
    //#define HAVE_BACKTRACE 1
    
    • 1
    • 2
    • 3
    ysdeps-unix.o external/dbus-1.15.8/dbus/dbus-sysdeps-unix.c"
    external/dbus-1.15.8/dbus/dbus-sysdeps-unix.c:3016:31: error: use of undeclared identifier 'SYS_pidfd_open'
      int pid_fd = (int) syscall (SYS_pidfd_open, pid, 0);
                                  ^
    config.h中注释掉宏控
    /* Define to 1 if you have the declaration of `SYS_pidfd_open', and to 0 if
       you don't. */
    //#define HAVE_DECL_SYS_PIDFD_OPEN 1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    external/dbus-1.15.8/dbus/dbus-internals.c:183:1: error: '_assertion' declared as an array with a negative size
    _DBUS_STATIC_ASSERT (sizeof (void *) == DBUS_SIZEOF_VOID_P);
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    external/dbus-1.15.8/dbus/../dbus/dbus-internals.h:485:36: note: expanded from macro '_DBUS_STATIC_ASSERT'
      typedef struct { char _assertion[(expr) ? 1 : -1]; } \
                                       ^~~~~~~~~~~~~~~
    1 error generated.
    
    dbus-internals.h 修改
    #define _DBUS_STATIC_ASSERT(expr) \
      typedef struct { char _assertion[(expr) ? 1 :0]; } \
      _DBUS_PASTE (_DBUS_STATIC_ASSERT_, __LINE__) _DBUS_GNUC_UNUSED
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    external/dbus-1.15.8/dbus/dbus-marshal-basic.c:1683:30: error: implicit conversion from 'long long' to 'dbus_int64_t' (aka 'long') changes value from 1254130450431 to -1 [-Werror,-Wconstant-conversion]
      dbus_int64_t array8[3] = { DBUS_INT64_CONSTANT (0x123ffffffff),
                               ~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    external/dbus-1.15.8/dbus/../dbus/dbus-arch-deps.h:41:58: note: expanded from macro 'DBUS_INT64_CONSTANT'
    #define DBUS_INT64_CONSTANT(val)  (_DBUS_GNUC_EXTENSION (val##L))
                                                             ^~~~~~
    <scratch space>:106:1: note: expanded from here
    0x123ffffffffL
    ^~~~~~~~~~~~~~
    
    :: Android.mk 修改
    LOCAL_CFLAGS += -Wno-constant-conversion
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    roid_arm64_armv8-a_kryo300_core/obj/bionic/libc/arch-common/bionic/crtend_so.o"
    ld.lld: error: undefined symbol: _dbus_pollable_set_epoll_new
    >>> referenced by dbus-pollable-set.c:37 (external/dbus-1.15.8/dbus/dbus-pollable-set.c:37)
    >>>               out/target/product/trinket/obj/SHARED_LIBRARIES/libdbus_intermediates/dbus-pollable-set.o:(_dbus_pollable_set_new)
    
    ld.lld: error: undefined symbol: _dbus_pollable_set_poll_new
    >>> referenced by dbus-pollable-set.c:43 (external/dbus-1.15.8/dbus/dbus-pollable-set.c:43)
    >>>               out/target/product/trinket/obj/SHARED_LIBRARIES/libdbus_intermediates/dbus-pollable-set.o:(_dbus_pollable_set_new)
    clang++: error: linker command failed with exit code 1 (use -v to see invocation)
    
    Android.mk 修改:
    添加dbus-pollable-set-epoll.c
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    external/dbus-1.15.8/bus/selinux.c:48:10: fatal error: 'selinux/selinux.h' file not found
    #include 
             ^~~~~~~~~~~~~~~~~~~
    /* SELinux support */
    #define HAVE_SELINUX 1
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    待续

  • 相关阅读:
    java计算机毕业设计学习资料校内共享平台MyBatis+系统+LW文档+源码+调试部署
    WeakHashMap 和 HashMap 的区别是什么,何时使用?
    年薪30万,达到人生巅峰,入职字节一个月,我却被无情碾压
    双十一哪款蓝牙耳机值得入手?音质超棒的蓝牙耳机推荐
    机器学习和深度学习常见算法
    Redis(四)
    数仓搭建-ODS层
    Vue:element-ui中表格过长内容隐藏显示
    Linux查看当前文件夹的大小
    【java】【SSM框架系列】【一】Spring
  • 原文地址:https://blog.csdn.net/wangjicong_215/article/details/133125098