当前位置:   article > 正文

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

can not link against

问题前提,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 <string>
  9. +#include <ft2build.h>
  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为啥不行???

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/562540
推荐阅读
相关标签
  

闽ICP备14008679号