• Android 12,调用系统库libft2.so 遇到的各种问题记录


    问题前提,Android 12系统,vendor静态库中调用 libft2.so。(vendor静态库中调用libft2.so会简单点,没这么麻烦)

    【问题1】 

    (native:vendor) can not link against libft2 (native:platform)

    本地debug尝试修改:

    为了本地环境debug调试方便,我找了个 mk文件,在里面添加了引用libft2.so

    /vendor/qcom/proprietary/chi-cdk/test/chifeature2testframework/common/build/android/Android.mk

    然后通过make libchifeature2testframework -j8 来验证,是否能成功引用libft2.so

    网络上找了很多资料,也尝试了很多的方法,不过都没效果。

    一、prebuild目录下相关内容修改

    1)ld.config.29.txt  相关内容修改

    find -name  ld.config.29.txt

    /prebuilts/vndk/v29/arm64/configs$ git status ./

        修改:     ld.config.29.txt
        修改:     vndkprivate.libraries.29.txt

    这边的namespace里面,把libft2.so都给加上。

    2)vndkprivate.libraries.29.txt 修改内容

    2、build目录下相关内容修改

    二、自己摸索

    external/freetype/Android.mp 内容修改。

    在第7行的位置,添加了vendor_available: true

    build/make/core/base_rules.mk:339: error: external/freetype: MODULE.TARGET.SHARED_LIBRARIES.libft2.vendor already defined by external/freetype

    有上面报错,原因是,vendor_available已经有地方定义了。

    ===================================================================

    问题(native:vendor) can not link against libft2 (native:platform) 真正的解决方法:

    proprietary:true

    如下图所示,在freetype的Android.bp里面,第6行的位置,添加上proprietary:true。

    三、libft2.so内容调用验证

    前面的编译终于没有问题。在out目录下也生成了对应的文件。(静态库生成的是.a后缀的文件,动态库生成的是.so后缀的文件)。

    libft2库是编译出来了,然后我又想要验证下,代码里面调用libft2内容有没有问题呢?然后我网上找了下相关调用,简单加了下调用代码。

    1. --- a/vendor/qcom/proprietary/chi-cdk/test/chifeature2testframework/feature2testcase.cpp
    2. +++ b/vendor/qcom/proprietary/chi-cdk/test/chifeature2testframework/feature2testcase.cpp
    3. @@ -16,8 +16,12 @@
    4. #include "chistatsproperty.h"
    5. #include "metaconfigparser.h"
    6. #include "streamconfigparser.h"
    7. -
    8. #include
    9. +#include
    10. +#include FT_CONFIG_CONFIG_H
    11. +#include FT_TYPES_H
    12. +#include FT_ERRORS_H
    13. +#include FT_FREETYPE_H
    14. // Initialize static variables
    15. UINT32 Feature2TestCase::m_frameNumber;
    16. @@ -187,6 +191,25 @@ CDKResult Feature2TestCase::SetupCamera()
    17. }
    18. }
    19. + //for test
    20. + FT_Library library;
    21. + if (FT_Init_FreeType(&library))
    22. + {
    23. + return CDKResultSuccess;
    24. + }
    25. +
    26. + // The Object In Which FreeType Holds Information On A Given
    27. + // Font Is Called A "face".
    28. + FT_Face face;
    29. +
    30. + // This Is Where We Load In The Font Information From The File.
    31. + // Of All The Places Where The Code Might Die, This Is The Most Likely,
    32. + // As FT_New_Face Will Fail If The Font File Does Not Exist Or Is Somehow Broken.
    33. + if (FT_New_Face(library, "arial.TTF", 0, &face))
    34. + {
    35. + return CDKResultSuccess;
    36. + }
    37. +
    38. CF2_LOG_EXIT();

      这里一定得注意,下面这些#include 一定得加上,不然也是没法调用到 FT_Face等内容的。

    error: unknown type name 'FT_Library'

    error: unknown type name 'FT_Face'

    1. #include FT_CONFIG_CONFIG_H
    2. #include FT_TYPES_H
    3. #include FT_ERRORS_H
    4. #include FT_FREETYPE_H

    四、vendor动态库中调用libft2.so

    vendor 动态库中调用libft2.so,需要修改是的freetype/Android.bp中如下的地方。

    在llndk_library中添加 vendor_available: true

    疑问:

    1)vendor静态库中,动态引用libft2.so为啥不行???

  • 相关阅读:
    权重衰减----添加正则化(多层感知机)
    mysql倒序查询
    Python找不到其他文件夹下的py文件并提示ModuleNotFoundError: No module named ‘xxx‘
    记一次 .NET某道闸收费系统 内存溢出分析
    机器人材料整理中的套-假-大-空话
    rust calcmine读取excel
    由 Base64 展开的知识探讨
    代码随想录算法训练营第四天|24、19、面试题 02.07、142、92(寄了)
    音频信号的频谱分析实例
    带你一起理解什么是数据库分片?
  • 原文地址:https://blog.csdn.net/Mr_ZJC/article/details/132939832