Skip to content
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

Closed
hsav20 opened this issue Apr 27, 2020 · 102 comments
Closed

增加头目录及库目录提供出错 #769

hsav20 opened this issue Apr 27, 2020 · 102 comments

Comments

@hsav20
Copy link

hsav20 commented Apr 27, 2020

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)

@waruqi
Copy link
Member

waruqi commented Apr 27, 2020

你从哪看的文档和examples?我从来没写过提供了add_option_includedirs 这种接口,只有 add_includedirs, add_linkdirs,请仔细看下文档 https://xmake.io/#/zh-cn/manual/project_target?id=targetadd_includedirs

@hsav20
Copy link
Author

hsav20 commented Apr 27, 2020

@waruqi
Copy link
Member

waruqi commented Apr 27, 2020

https://my.oschina.net/tboox/blog/540178?p=1

你能不能不要翻这么老的文章哈,还是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上的文章不怎么更新,尽量以官方文档站为主,这个肯定是及时最新的。。

@hsav20
Copy link
Author

hsav20 commented Apr 27, 2020

之前在xmake.io打开的都是english版本的,就在网上试试找了,哈哈

@waruqi
Copy link
Member

waruqi commented Apr 27, 2020

之前在xmake.io打开的都是english版本的,就在网上试试找了,哈哈

你切到中文不就好了,en/zh版本都有啊。。中文更详细些。。

@hsav20
Copy link
Author

hsav20 commented Apr 27, 2020

我刚才就是没有出来呢,另外,怎样加入外面的*.so ?
libs\x86\lib\libavcodec.so

只使用下面可以吗?
add_linkdirs("libs")

@waruqi
Copy link
Member

waruqi commented Apr 27, 2020

首先得确定xmake.lua所在目录,add_linkdirs都是相对于这个目录的路径

add_linkdirs("xxxxx libs\x86\lib") 前面的xxxx自己改下调整下相对路径。。如果在xmake.lua的上层目录的话。。
add_links("avcodec")

@hsav20
Copy link
Author

hsav20 commented Apr 27, 2020

add_includedirs("libs/x86/include")
add_linkdirs("libs/x86/lib")
add_files("native-lib.cpp")
add_links("avutil");
add_links("avcodec");
add_links("avformat");
add_links("swscale");
add_links("swresample");
add_links("avfilter");

能找到libs/x86/include表示相对路径可以找到了
-LE:\Android\sdk\ndk\21.0.6113669\sources\cxx-stl\llvm-libc++/libs/arm64-v8a -lc++_static -lc++abi -nostdlib++
error: E:\Android\sdk\ndk\21.0.6113669\toolchains\aarch64-linux-android-4.9\prebuilt\windows-x86_64/lib/gcc/aarch64-linux-android/4.9.x/../../../../aarch64-linux-android/bin\ld: skipping incompatible libs\x86\lib/libavutil.so when searching for -lavutil
E:\Android\sdk\ndk\21.0.6113669\toolchains\aarch64-linux-android-4.9\prebuilt\windows-x86_64/lib/gcc/aarch64-linux-android/4.9.x/../../../../aarch64-linux-android/bin\ld: cannot find -lavutil

但没有找到 avutil (libs/x86/lib/libavutil.so存在的,如果是libavutil.a 又是如何的)?

@waruqi
Copy link
Member

waruqi commented Apr 27, 2020

skipping incompatible libs\x86\lib/libavutil.so when searching for -lavutil

自己仔细看下错误提示,不兼容so,不是没找到,是找到了用不了。。你用arm64的编译器,提供的却是x86的libdir的so库,能用才怪了。。

如果是libavutil.a 又是如何的

用法一样。

@hsav20
Copy link
Author

hsav20 commented Apr 27, 2020

对了,如何设置多个不同平台的库的?x86换其他以后呢?add_linkdirs("libs/x86/lib")

@waruqi
Copy link
Member

waruqi commented Apr 27, 2020

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

@hsav20
Copy link
Author

hsav20 commented Apr 27, 2020

1、我整理了下文件夹后,在android视图下见不到xmake的编辑了
2、运行时少了其他so了
3、xmake可以直接编译ffmpeg吗,有没有相关的例子?
TestC.zip

@hsav20
Copy link
Author

hsav20 commented Apr 27, 2020

x86.zip

@hsav20
Copy link
Author

hsav20 commented Apr 27, 2020

@hsav20
Copy link
Author

hsav20 commented Apr 27, 2020

我又将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"...
04-27 18:04:12.434 15984-15984/ltd.hsav E/AndroidRuntime: FATAL EXCEPTION: main
Process: ltd.hsav, PID: 15984
java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "ff_reverse" referenced by "libnative-lib.so"...
at java.lang.Runtime.loadLibrary(Runtime.java:371)
at java.lang.System.loadLibrary(System.java:988)
at ltd.hsav.MainActivity.(MainActivity.java:18)
at java.lang.reflect.Constructor.newInstance(Native Method)
at java.lang.Class.newInstance(Class.java:1606)
at android.app.Instrumentation.newActivity(Instrumentation.java:1066)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2226)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
at android.app.ActivityThread.access$800(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

提示的reverse我查过在 libavutil.a 之中的 reverse.o ff_reverse
链接为什么没有加入libavutil.a的内容?
另外,add_linkdirs("libs/$(arch)") 这样不行。只能用add_linkdirs("libs/x86")

@hsav20
Copy link
Author

hsav20 commented Apr 27, 2020

TestC.zip

@hsav20
Copy link
Author

hsav20 commented Apr 27, 2020

lib_a_file.zip

@hsav20
Copy link
Author

hsav20 commented Apr 27, 2020

libavcodec.zip

@hsav20
Copy link
Author

hsav20 commented Apr 27, 2020

一共做了两次,
第一次加入*.so,提示少了一些so
第二次加入*.a,提示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"...

到现在为止还不能使用

@hsav20
Copy link
Author

hsav20 commented Apr 27, 2020

(%$QNWAC3`~QSJ2W)K8BJ

这里看不到xmake及c了

@waruqi
Copy link
Member

waruqi commented Apr 27, 2020

第一次加入*.so,提示少了一些so

xmake-gradle插件只能对自己生成的so自动copy到libs目录,第三方so目前需要自己手动放置到对应libs目录,否则不会打入包内

第二次加入*.a,提示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"...

ffmpeg各个库之前的links顺序也是有要求的,utils属于基础库,得最后links,你放置太靠前了,这种找不到符号的错误 跟xmake没啥关系,这种你自己调下吧。。

    add_links("avfilter", "avdevice", "avformat", "avcodec", "swscale", "swresample", "avutil")

这里看不到xmake及c了

建议你先熟悉下androidstudio的使用,这个跟xmake也没任何关系。。你切到Android视图结构当然看不到文件了,只能看到class,可以自行google下。。只有project视图才能看到文件。

@waruqi
Copy link
Member

waruqi commented Apr 27, 2020

另外,add_linkdirs("libs/$(arch)") 这样不行。只能用add_linkdirs("libs/x86")

怎么个不行法,是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下就不行了。一会libs/ 一会 ../libs/ 。。通过$(arch)当然没法自动切了

@waruqi
Copy link
Member

waruqi commented Apr 27, 2020

3、xmake可以直接编译ffmpeg吗,有没有相关的例子?

可以直接通过add_requires("ffmpeg")集成ffmpeg库,不过目前仅支持 arm 的,不支持x86

add_requries("ffmpeg")
target("test")
    -- ...
    add_packages("ffmpeg")

@hsav20
Copy link
Author

hsav20 commented Apr 27, 2020

不是的,原来有的,而且新建的cmake有的
H7{AAXC0QU4TOCW {E}BP{N

@waruqi
Copy link
Member

waruqi commented Apr 27, 2020

不是的,原来有的,而且新建的cmake有的

人家是google官方在gradle中内置支持的cmake,当然androidstudio能识别到,xmake提供的插件仅仅只是跟gradle适配,不能跟androidstudio也完全适配。。

你切到Projects视图不就可以看到cpp和编辑了么。。

@hsav20
Copy link
Author

hsav20 commented Apr 27, 2020

TestXmake.zip
error: native-lib.cpp:7:14: fatal error: 'libavcodec/avcodec.h' file not found
#include "libavcodec/avcodec.h"
^~~~~~~~~~~~~~~~~~~~~~

@hsav20
Copy link
Author

hsav20 commented Apr 27, 2020

我重新按照google官方推荐的目录再做一次,发现找不到src/main/cpp/include下面的文件了
8616{RSNXY9CW$P 06CDL02

@waruqi
Copy link
Member

waruqi commented Apr 27, 2020

error: native-lib.cpp:7:14: fatal error: 'libavcodec/avcodec.h' file not found
#include "libavcodec/avcodec.h"
^~~~~~~~~~~~~~~~~~~~~~

首先,你得先确认下,add_includedirs() 有没有吧 libavcodec 所在的目录加进来。。

@waruqi
Copy link
Member

waruqi commented Apr 27, 2020

add_includedirs("src/main/cpp/include")

这个设置就不对,我之前说了,add_xxx这种接口设置,跟路径相关的,都是相对于xmake.lua所在目录的。。

add_includedirs("include")

@hsav20
Copy link
Author

hsav20 commented Apr 28, 2020

但是,可以提示下或者出错吗?

@hsav20
Copy link
Author

hsav20 commented Apr 29, 2020

如何增加类似:
LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog -lz -lOpenSLES -latomic -ljnigraphics -landroid -lEGL -lGLESv2
LOCAL_EXPORT_LDLIBS := -llog

@waruqi
Copy link
Member

waruqi commented Apr 29, 2020

java.lang.UnsatisfiedLinkError: dlopen failed: library "libclang_rt.asan-i686-android.so" not found

因为你开了clang的asan,所以依赖的so库,你得自己放置到libs下,确保打包到apk里面去。。所以我不建议线上开asan这种,除非是内部跑内存分析测试,线上开asan干扰还是很大的。

LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog -lz -lOpenSLES -latomic -ljnigraphics -landroid -lEGL -lGLESv2

自己add_syslinks() add_linkdirs() 自己加

@hsav20
Copy link
Author

hsav20 commented Apr 29, 2020

{H7~TKW`)E2X%UAS2BBW JM
E:\Android\sdk\ndk\21.0.6113669\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++ -o ......\build\xmake\android\x86\asan\libnative-lib.so ......\build\xmake.objs\native-lib\android\x86\asan.\native-lib.cpp.o -Llibs\x86 -lavcodec -lavformat -lswscale -lswresample -lavfilter -lavutil -l-llog -l-lz -shared -fPIC -llog -target i686-none-linux-android -gcc-toolchain E:\Android\sdk\ndk\21.0.6113669\toolchains\x86-4.9\prebuilt\windows-x86_64 --sysroot=E:\Android\sdk\ndk\21.0.6113669\platforms\android-21/arch-x86 -LE:\Android\sdk\ndk\21.0.6113669\sources\cxx-stl\llvm-libc++/libs/x86 -lc++_static -lc++abi -nostdlib++
error: E:\Android\sdk\ndk\21.0.6113669\toolchains\x86-4.9\prebuilt\windows-x86_64/lib/gcc/i686-linux-android/4.9.x/../../../../i686-linux-android/bin\ld: error: cannot find -l-llog
E:\Android\sdk\ndk\21.0.6113669\toolchains\x86-4.9\prebuilt\windows-x86_64/lib/gcc/i686-linux-android/4.9.x/../../../../i686-linux-android/bin\ld: error: cannot find -l-lz
clang++: error: linker command failed with exit code 1 (use -v to see invocation)

FAILURE: Build failed with an exception.

  • What went wrong:
    Execution failed for task ':app:xmakeBuildForX86'.

exec failed( -1)

  • Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

  • Get more help at https://help.gradle.org

BUILD FAILED in 2s

@waruqi
Copy link
Member

waruqi commented Apr 29, 2020

。。。。你用之前好歹到https://xmake.io 上看看接口文档哈。。add_syslinks("log", "z")

@hsav20
Copy link
Author

hsav20 commented Apr 29, 2020

我已经找过,没有找到才问的。提个建议,可不可以有类似Q&A的页面,就是其他编译系统的一些功能对应xmake的方法,例如我在网上找到LOCAL_LDLIBS := 我用这类关键词可以找到你的对应方法

@hsav20
Copy link
Author

hsav20 commented Apr 29, 2020

或者刚才 add_syslinks("-llog", "-lz") 你可以提示下不建议这样用,或者干脆出错

@hsav20
Copy link
Author

hsav20 commented Apr 29, 2020

去掉后--toolchain=clang-usan编译ffmpeg 可以了,说明add_rules 并未能找全需要的函数,或者可能是clang的问题吧

@waruqi
Copy link
Member

waruqi commented Apr 29, 2020

我已经找过,没有找到才问的。提个建议,可不可以有类似Q&A的页面,就是其他编译系统的一些功能对应xmake的方法,例如我在网上找到LOCAL_LDLIBS := 我用这类关键词可以找到你的对应方法

太多东西啦,你永远列不全 用户遇到的各种case,而且我也维护不过来,这种只有遇到问题 可以到issues上提,其他用户也就可以直接在issues上找

@hsav20
Copy link
Author

hsav20 commented Apr 29, 2020

好的,多谢了

@waruqi
Copy link
Member

waruqi commented Apr 29, 2020

或者刚才 add_syslinks("-llog", "-lz") 你可以提示下不建议这样用,或者干脆出错

不能,所以编译不是出错了么,clang++链接器会给你提示,cmake都不干这事。而且这种是基础哈。。看编译器的错误提示,都能知道大概了

@waruqi
Copy link
Member

waruqi commented Apr 29, 2020

去掉后--toolchain=clang-usan编译ffmpeg 可以了,说明add_rules 并未能找全需要的函数,或者可能是clang的问题吧

刚不是说了么,你asan的so库你自己没打包进来当然不行了,这种你多研究下clang asan吧。。跟xmake没半毛钱关系。。

@hsav20
Copy link
Author

hsav20 commented Apr 29, 2020

好的,我继续填其他坑

@waruqi
Copy link
Member

waruqi commented Apr 29, 2020

那这里我先close了

@waruqi waruqi closed this as completed Apr 29, 2020
@hsav20
Copy link
Author

hsav20 commented Apr 30, 2020

昨天 的问题在x86及arm-v7a编译可以的,但当加入arm64-v8a后说法出错,不太明白 run ranlib to add one是应该怎样操作

Task :app:xmakeConfigureForArm64

xmake f -y -v -p android -a arm64-v8a --ndk=E:\Android\sdk\ndk\21.0.6113669 --buildir=D:\ktv\TestXmake\app\build\xmake
configure
{
sh = E:\Android\sdk\ndk\21.0.6113669\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++
ndk = E:\Android\sdk\ndk\21.0.6113669
ndk_stdcxx = true
host = windows
sdk = E:\Android\sdk
buildir = ......\build\xmake
ndk_toolchains_ver = 4.9
ndk_sdkver = 21
arch = arm64-v8a
ccache = true
build_toolver = 28.0.3
mode = release
ld = E:\Android\sdk\ndk\21.0.6113669\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++
cxx = E:\Android\sdk\ndk\21.0.6113669\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++
cross = aarch64-linux-android-
bin = E:\Android\sdk\ndk\21.0.6113669\toolchains\llvm\prebuilt\windows-x86_64\bin
kind = static
gcc_toolchain = E:\Android\sdk\ndk\21.0.6113669\toolchains\aarch64-linux-android-4.9\prebuilt\windows-x86_64
android_sdk = E:\Android\sdk
plat = android
ndkver = 21
}

Task :app:xmakeBuildForArm64 FAILED

xmake build -v
configure
{
ccache = true
ndk = E:\Android\sdk\ndk\21.0.6113669
ndk_stdcxx = true
host = windows
sdk = E:\Android\sdk
buildir = ......\build\xmake
ndk_toolchains_ver = 4.9
ndk_sdkver = 21
arch = arm64-v8a
sh = E:\Android\sdk\ndk\21.0.6113669\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++
build_toolver = 28.0.3
mode = release
ld = E:\Android\sdk\ndk\21.0.6113669\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++
cxx = E:\Android\sdk\ndk\21.0.6113669\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++
cross = aarch64-linux-android-
bin = E:\Android\sdk\ndk\21.0.6113669\toolchains\llvm\prebuilt\windows-x86_64\bin
kind = static
gcc_toolchain = E:\Android\sdk\ndk\21.0.6113669\toolchains\aarch64-linux-android-4.9\prebuilt\windows-x86_64
android_sdk = E:\Android\sdk
plat = android
ndkver = 21
}
[ 75%]: linking.release libnative-lib.so
E:\Android\sdk\ndk\21.0.6113669\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++ -o ......\build\xmake\android\arm64-v8a\release\libnative-lib.so ......\build\xmake.objs\native-lib\android\arm64-v8a\release.\native-lib.cpp.o -Llibs\arm64-v8a -s -lavcodec -lavformat -lswscale -lswresample -lavfilter -lavutil -llog -lz -shared -fPIC -target aarch64-none-linux-android -gcc-toolchain E:\Android\sdk\ndk\21.0.6113669\toolchains\aarch64-linux-android-4.9\prebuilt\windows-x86_64 --sysroot=E:\Android\sdk\ndk\21.0.6113669\platforms\android-21/arch-arm64 -LE:\Android\sdk\ndk\21.0.6113669\sources\cxx-stl\llvm-libc++/libs/arm64-v8a -lc++_static -lc++abi -nostdlib++
error: libs\arm64-v8a\libavcodec.a: error adding symbols: Archive has no index; run ranlib to add one
clang++: error: linker command failed with exit code 1 (use -v to see invocation)

FAILURE: Build failed with an exception.

  • What went wrong:
    Execution failed for task ':app:xmakeBuildForArm64'.

exec failed( -1)

  • Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

  • Get more help at https://help.gradle.org

BUILD FAILED in 2s
2 actionable tasks: 2 executed

@waruqi
Copy link
Member

waruqi commented Apr 30, 2020

arm64-v8a\libavcodec.a

你的libavcodec有问题,可能没东西在里面,具体自己研究下吧

@hsav20
Copy link
Author

hsav20 commented Apr 30, 2020

不是的,都是相同的编译方式,而且按照其余两种的体积对比,比例是对的,add_links("avcodec");是因为他在前面,其他的放在前面也是相应提示,只是说明文件的格式可以不符合,但能编译过应该也不会错啊
~@CSD8}J0X`OC 8GD3LSF1K

@waruqi
Copy link
Member

waruqi commented Apr 30, 2020

我只看错误结果,它的提示就是说明你的libavcodec.a是有问题的,如果你用了pc的ar而不是ndk里面的ar生成的.a,ndk的linker也是不认的 也会报这个错,反正你自己研究下吧。。google下 一堆解决方案了。

@hsav20
Copy link
Author

hsav20 commented Apr 30, 2020

我试过,假如libavcodec.a不存在,提示
E:\Android\sdk\ndk\21.0.6113669\toolchains\aarch64-linux-android-4.9\prebuilt\windows-x86_64/lib/gcc/aarch64-linux-android/4.9.x/../../../../aarch64-linux-android/bin\ld: cannot find -lavcodec
假如我用另外一个其他文件改名为libavcodec.a,提示
E:\Android\sdk\ndk\21.0.6113669\toolchains\aarch64-linux-android-4.9\prebuilt\windows-x86_64/lib/gcc/aarch64-linux-android/4.9.x/../../../../aarch64-linux-android/bin\ld:libs\arm64-v8a\libavcodec.a: file format not recognized; treating as linker script

假如我用x86或者arm生成的libavcodec.a放入,提示
libs\arm64-v8a\libavcodec.a: error adding symbols: Archive has no index; run ranlib to add one

说明你现在选择的arm64-v8a与ffmpeg生成的arm64-v8a *.a文件不是同样的arch
--arch=arm64

	ASM="--enable-asm"
	CLANG=aarch64-linux-android21-clang
	STRIP=aarch64-linux-android-strip

--cc=$TOOLCHAIN/$CLANG
--cxx=$TOOLCHAIN/$CLANG++
--strip=$TOOLCHAIN/$STRIP \

请问这样的选择是不是已经为arm64-v8a?

@waruqi
Copy link
Member

waruqi commented Apr 30, 2020

说明你现在选择的arm64-v8a与ffmpeg生成的arm64-v8a *.a文件不是同样的arch

所以我不是说了么,你编的.a不对,ar也不对。。你只设置了cc,ar没设置。用了pc上的ar了。。

至于具体是否是ar的问题,你自己研究下吧,反正xmake里面的arm64编译的.a/so肯定是没问题的。。

如果你用了pc的ar而不是ndk里面的ar生成的.a,ndk的linker也是不认的 也会报这个错

@hsav20
Copy link
Author

hsav20 commented Apr 30, 2020

--arch=arm64
--cpu=arm64-v8a
--cc=$CC
--cxx=$CXX \

ar不知怎样设置,

另arm的编译也没有设置,好像没有出错

@waruqi
Copy link
Member

waruqi commented Apr 30, 2020

ffmpeg的编译你自己研究下吧

@hsav20
Copy link
Author

hsav20 commented Apr 30, 2020

但是总链接是你这边,那你在arm64时 用了什么参数?我在哪里可以看到,然后找还没有实现的

@waruqi
Copy link
Member

waruqi commented Apr 30, 2020

但是总链接是你这边,那你在arm64时 用了什么参数?我在哪里可以看到,然后找还没有实现的

总link你刚的错误输出里面不是已经打印出来了么。。

E:\Android\sdk\ndk\21.0.6113669\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++ -o ......\build\xmake\android\arm64-v8a\release\libnative-lib.so ......\build\xmake.objs\native-lib\android\arm64-v8a\release.\native-lib.cpp.o -Llibs\arm64-v8a -s -lavcodec -lavformat -lswscale -lswresample -lavfilter -lavutil -llog -lz -shared -fPIC -target aarch64-none-linux-android -gcc-toolchain E:\Android\sdk\ndk\21.0.6113669\toolchains\aarch64-linux-android-4.9\prebuilt\windows-x86_64 --sysroot=E:\Android\sdk\ndk\21.0.6113669\platforms\android-21/arch-arm64 -LE:\Android\sdk\ndk\21.0.6113669\sources\cxx-stl\llvm-libc++/libs/arm64-v8a -lc++_static -lc++abi -nostdlib++

@hsav20
Copy link
Author

hsav20 commented Apr 30, 2020

网上找了很多方法都不行,因为多是使用旧版本的ffmpeg及旧的ndk用的是gcc的。
编译及编译器方面是你专家,希望可以出手在你的arm的基础上试,这些天在一直这个坑里出不来。

@hsav20
Copy link
Author

hsav20 commented May 5, 2020

试了很多方法都不行。现在我觉得生成不同平台的*.a文件主要原因是在选择正确的clang,可能与ffmpeg没有关系。 我有个想法,xmake有没有交叉生成arm64-v8a的例子?我随便生一个测试下。

@waruqi
Copy link
Member

waruqi commented May 5, 2020

-target aarch64-none-linux-android

用的就是arm64-v8a的

你搞个空工程试下不就好了

@hsav20
Copy link
Author

hsav20 commented May 5, 2020

用xmake如何生成arm86的空工程?

@waruqi
Copy link
Member

waruqi commented May 5, 2020

xmake create -t shared -l c test

@yunshouhu
Copy link

yunshouhu commented May 16, 2020

注意:原来正确的是add_linkdirs("libs/$(arch)/lib")
内置变量的获取很容易误写成add_linkdirs("libs/${arch}/lib") 。
一个小括号和一个大括号。。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants