Closed fasiondog closed 2 years ago
另外,自定义的交叉编译链可以平滑的传到使用cmake编译的源码依赖包,但没法都穿到xmake的
在使用交叉编译时,如果有依赖其他源码包时,对依赖的源码包总是使用 gcc 去编译,导致某些情况下,最终二进制文件链接失败。
所以,干嘛要去改成 g++ 呢,代码编译走 gcc 完全可以,没必要去切。
另外,自定义的交叉编译链可以平滑的传到使用cmake编译的源码依赖包,但没法都穿到xmake的
自定义 toolchain ,你得放到全局 ~/xmakerc.lua 里面去定义,因为透传给 xmake 是透传的 toolchain 名,但是 toolchain 定义 在子包 xmake.lua 是没定义的,因为你只在自己项目里面定义了它,找不到,你只有定义到全局才能找到。。
而你这里 --cc 没生效,是 tools.xmake 里面目前没透传用户的 --cc 参数导致,我刚加上去了,再试下
而 cmake/autoconf, 是透传的 cc/ld 没走 toolchain 整个透传,好处是能直接传过去,坏处是没法完整透传 自定义 toolchain 的所有东西和状态还有环境。。
多谢,我明天试下
我dev改进过了,自定义toolchain也可以直接透传,不需要 xmakerc
在使用交叉编译时,如果有依赖其他源码包时,对依赖的源码包总是使用 gcc 去编译,导致某些情况下,最终二进制文件链接失败。
如示例的hello工程,加入sqlite3依赖(注:这个示例可以正常编译链接) add_rules("mode.debug", "mode.release") add_requires("sqlite3") target("hello") set_kind("binary") add_packages("sqlite3") add_files("src/*.cpp")
使用下面的配置命令: xmake f -c \ -p cross --sdk=/home/ubuntu/soft/toolchain_v83x_linux_x86/toolchain-sunxi-musl/toolchain \ --cxx=/home/ubuntu/soft/toolchain_v83x_linux_x86/toolchain-sunxi-musl/toolchain/bin/arm-openwrt-linux-muslgnueabi-g++ \ --cc=/home/ubuntu/soft/toolchain_v83x_linux_x86/toolchain-sunxi-musl/toolchain/bin/arm-openwrt-linux-muslgnueabi-g++ \ -a armv7-a \ -y -vD \ -k shared
编译依赖的sqlite3时总是优先使用gcc。
这样导致依赖包使用gcc,而项目本身使用g++,在某些涉及线程局部变量时,导致项目链接失败。
建议 toolchains\cross\load.lua中的下面这句 toolchain:add("toolset", "cxx", cross .. "gcc", cross .. "clang", cross .. "g++", cross .. "clang++")
改为: toolchain:add("toolset", "cxx", cross .. "g++", cross .. "clang++", cross .. "gcc", cross .. "clang")
C++ 的还是C++的编译器优先