赞
踩
问题前提,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
网络上找了很多资料,也尝试了很多的方法,不过都没效果。
find -name ld.config.29.txt
/prebuilts/vndk/v29/arm64/configs$ git status ./
修改: ld.config.29.txt
修改: vndkprivate.libraries.29.txt
这边的namespace里面,把libft2.so都给加上。
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。
前面的编译终于没有问题。在out目录下也生成了对应的文件。(静态库生成的是.a后缀的文件,动态库生成的是.so后缀的文件)。
libft2库是编译出来了,然后我又想要验证下,代码里面调用libft2内容有没有问题呢?然后我网上找了下相关调用,简单加了下调用代码。
-
- --- a/vendor/qcom/proprietary/chi-cdk/test/chifeature2testframework/feature2testcase.cpp
- +++ b/vendor/qcom/proprietary/chi-cdk/test/chifeature2testframework/feature2testcase.cpp
- @@ -16,8 +16,12 @@
- #include "chistatsproperty.h"
- #include "metaconfigparser.h"
- #include "streamconfigparser.h"
- -
- #include <string>
- +#include <ft2build.h>
- +#include FT_CONFIG_CONFIG_H
- +#include FT_TYPES_H
- +#include FT_ERRORS_H
- +#include FT_FREETYPE_H
-
- // Initialize static variables
- UINT32 Feature2TestCase::m_frameNumber;
- @@ -187,6 +191,25 @@ CDKResult Feature2TestCase::SetupCamera()
- }
- }
-
- + //for test
- + FT_Library library;
- + if (FT_Init_FreeType(&library))
- + {
- + return CDKResultSuccess;
- + }
- +
- + // The Object In Which FreeType Holds Information On A Given
- + // Font Is Called A "face".
- + FT_Face face;
- +
- + // This Is Where We Load In The Font Information From The File.
- + // Of All The Places Where The Code Might Die, This Is The Most Likely,
- + // As FT_New_Face Will Fail If The Font File Does Not Exist Or Is Somehow Broken.
- + if (FT_New_Face(library, "arial.TTF", 0, &face))
- + {
- + return CDKResultSuccess;
- + }
- +
- CF2_LOG_EXIT();
-
-
这里一定得注意,下面这些#include 一定得加上,不然也是没法调用到 FT_Face等内容的。
error: unknown type name 'FT_Library'
error: unknown type name 'FT_Face'
- #include FT_CONFIG_CONFIG_H
- #include FT_TYPES_H
- #include FT_ERRORS_H
- #include FT_FREETYPE_H
vendor 动态库中调用libft2.so,需要修改是的freetype/Android.bp中如下的地方。
在llndk_library中添加 vendor_available: true
1)vendor静态库中,动态引用libft2.so为啥不行???
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。