-
-
Notifications
You must be signed in to change notification settings - Fork 818
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
增加头目录及库目录提供出错 #769
Comments
你从哪看的文档和examples?我从来没写过提供了add_option_includedirs 这种接口,只有 add_includedirs, add_linkdirs,请仔细看下文档 https://xmake.io/#/zh-cn/manual/project_target?id=targetadd_includedirs |
你能不能不要翻这么老的文章哈,还是15年的了,那个时候xmake才1.x版本哈,5年迭代过去了哈,我都快忘记了,1.x那个年代api不稳定,2.x开始重构后才稳定下来的。。 而且这里面提到的add_option_includedirs 是给 add_option 用的,不是给target用的。。 你就不能直接看官方文档么。。https://xmake.io 官方博客上的文章都比这个新:https://tboox.org/cn/category/ osc上的文章不怎么更新,尽量以官方文档站为主,这个肯定是及时最新的。。 |
之前在xmake.io打开的都是english版本的,就在网上试试找了,哈哈 |
你切到中文不就好了,en/zh版本都有啊。。中文更详细些。。 |
我刚才就是没有出来呢,另外,怎样加入外面的*.so ? 只使用下面可以吗? |
首先得确定xmake.lua所在目录,add_linkdirs都是相对于这个目录的路径 add_linkdirs("xxxxx libs\x86\lib") 前面的xxxx自己改下调整下相对路径。。如果在xmake.lua的上层目录的话。。 |
能找到libs/x86/include表示相对路径可以找到了 但没有找到 avutil (libs/x86/lib/libavutil.so存在的,如果是libavutil.a 又是如何的)? |
自己仔细看下错误提示,不兼容so,不是没找到,是找到了用不了。。你用arm64的编译器,提供的却是x86的libdir的so库,能用才怪了。。
用法一样。 |
对了,如何设置多个不同平台的库的?x86换其他以后呢?add_linkdirs("libs/x86/lib") |
add_linkdirs("libs/$(arch)/lib") 自动根据arch -> x86, armeabi, armeabi-v7a ...切下目录 或者用 if is_arch("x86") then
add_linkdirs("libs/x86/lib")
elseif is_arch("armeabi") then
add_linkdirs("libs/armeabi/lib")
end |
1、我整理了下文件夹后,在android视图下见不到xmake的编辑了 |
我又将ffmpeg编译为*.a库。运行提示04-27 18:04:12.433 15984-15984/ltd.hsav E/art: dlopen("/data/app/ltd.hsav-2/lib/x86/libnative-lib.so", RTLD_LAZY) failed: dlopen failed: cannot locate symbol "ff_reverse" referenced by "libnative-lib.so"... 提示的reverse我查过在 libavutil.a 之中的 reverse.o ff_reverse |
一共做了两次, 到现在为止还不能使用 |
xmake-gradle插件只能对自己生成的so自动copy到libs目录,第三方so目前需要自己手动放置到对应libs目录,否则不会打入包内
ffmpeg各个库之前的links顺序也是有要求的,utils属于基础库,得最后links,你放置太靠前了,这种找不到符号的错误 跟xmake没啥关系,这种你自己调下吧。。 add_links("avfilter", "avdevice", "avformat", "avcodec", "swscale", "swresample", "avutil")
建议你先熟悉下androidstudio的使用,这个跟xmake也没任何关系。。你切到Android视图结构当然看不到文件了,只能看到class,可以自行google下。。只有project视图才能看到文件。 |
怎么个不行法,是x86库找不到,还是arm库找不,你得说清楚哪里不行,否则我没法知道是怎么回事,反正看你的配置 if is_arch("armeabi-v7a") then
add_linkdirs("../libs/armeabi-v7a")
elseif is_arch("arm64-v8a") then
add_linkdirs("../libs/arm64-v8a")
elseif is_arch("x86") then
add_linkdirs("libs/x86")
end 不同arch的so都不在相同目录结构层级下,当然切到Arm下就不行了。一会 |
可以直接通过 add_requries("ffmpeg")
target("test")
-- ...
add_packages("ffmpeg") |
人家是google官方在gradle中内置支持的cmake,当然androidstudio能识别到,xmake提供的插件仅仅只是跟gradle适配,不能跟androidstudio也完全适配。。 你切到Projects视图不就可以看到cpp和编辑了么。。 |
TestXmake.zip |
首先,你得先确认下,add_includedirs() 有没有吧 libavcodec 所在的目录加进来。。 |
这个设置就不对,我之前说了,add_xxx这种接口设置,跟路径相关的,都是相对于xmake.lua所在目录的。。 add_includedirs("include") |
但是,可以提示下或者出错吗? |
如何增加类似: |
因为你开了clang的asan,所以依赖的so库,你得自己放置到libs下,确保打包到apk里面去。。所以我不建议线上开asan这种,除非是内部跑内存分析测试,线上开asan干扰还是很大的。
自己add_syslinks() add_linkdirs() 自己加 |
FAILURE: Build failed with an exception.
BUILD FAILED in 2s |
。。。。你用之前好歹到https://xmake.io 上看看接口文档哈。。add_syslinks("log", "z") |
我已经找过,没有找到才问的。提个建议,可不可以有类似Q&A的页面,就是其他编译系统的一些功能对应xmake的方法,例如我在网上找到LOCAL_LDLIBS := 我用这类关键词可以找到你的对应方法 |
或者刚才 add_syslinks("-llog", "-lz") 你可以提示下不建议这样用,或者干脆出错 |
去掉后--toolchain=clang-usan编译ffmpeg 可以了,说明add_rules 并未能找全需要的函数,或者可能是clang的问题吧 |
太多东西啦,你永远列不全 用户遇到的各种case,而且我也维护不过来,这种只有遇到问题 可以到issues上提,其他用户也就可以直接在issues上找 |
好的,多谢了 |
不能,所以编译不是出错了么,clang++链接器会给你提示,cmake都不干这事。而且这种是基础哈。。看编译器的错误提示,都能知道大概了 |
刚不是说了么,你asan的so库你自己没打包进来当然不行了,这种你多研究下clang asan吧。。跟xmake没半毛钱关系。。 |
好的,我继续填其他坑 |
那这里我先close了 |
昨天 的问题在x86及arm-v7a编译可以的,但当加入arm64-v8a后说法出错,不太明白 run ranlib to add one是应该怎样操作
FAILURE: Build failed with an exception.
BUILD FAILED in 2s |
你的libavcodec有问题,可能没东西在里面,具体自己研究下吧 |
我只看错误结果,它的提示就是说明你的libavcodec.a是有问题的,如果你用了pc的ar而不是ndk里面的ar生成的.a,ndk的linker也是不认的 也会报这个错,反正你自己研究下吧。。google下 一堆解决方案了。 |
我试过,假如libavcodec.a不存在,提示 假如我用x86或者arm生成的libavcodec.a放入,提示 说明你现在选择的arm64-v8a与ffmpeg生成的arm64-v8a *.a文件不是同样的arch
--cc=$TOOLCHAIN/$CLANG 请问这样的选择是不是已经为arm64-v8a? |
所以我不是说了么,你编的.a不对,ar也不对。。你只设置了cc,ar没设置。用了pc上的ar了。。 至于具体是否是ar的问题,你自己研究下吧,反正xmake里面的arm64编译的.a/so肯定是没问题的。。
|
--arch=arm64 ar不知怎样设置, 另arm的编译也没有设置,好像没有出错 |
ffmpeg的编译你自己研究下吧 |
但是总链接是你这边,那你在arm64时 用了什么参数?我在哪里可以看到,然后找还没有实现的 |
总link你刚的错误输出里面不是已经打印出来了么。。
|
网上找了很多方法都不行,因为多是使用旧版本的ffmpeg及旧的ndk用的是gcc的。 |
试了很多方法都不行。现在我觉得生成不同平台的*.a文件主要原因是在选择正确的clang,可能与ffmpeg没有关系。 我有个想法,xmake有没有交叉生成arm64-v8a的例子?我随便生一个测试下。 |
用的就是arm64-v8a的 你搞个空工程试下不就好了 |
用xmake如何生成arm86的空工程? |
xmake create -t shared -l c test |
注意:原来正确的是add_linkdirs("libs/$(arch)/lib") |
add_rules("mode.debug", "mode.release")
target("native-lib")
set_kind("shared")
add_option_includedirs("libs\x86\include")
add_option_linkdirs("libs")
add_files("native-lib.cpp")
(试过add_option_includedirs("libs/x86/include")也是一样)
.\xmake.lua:4: attempt to call global 'add_option_includedirs' (a nil value)
The text was updated successfully, but these errors were encountered: