最近折腾随身 Wi-Fi ,看到别人开源了 at_server ,仓库如下: https://github.com/newton-miku/jc09
我在 amd64 主机里面编译好了,编译出的执行文件在 amd64 可以运行。但是随身 Wi-Fi 是 arm64 的,需要交叉编译才可以。
里面有个 makefile 如下:
Makefile
OUTDIR=build
CC = gcc
CFLAGS = $(shell pkg-config --cflags glib-2.0 gio-2.0)
LIBS = $(shell pkg-config --libs glib-2.0 gio-2.0) -lpthread
main: main.c mongoose.c
$(CC) -o $(OUTDIR)/main main.c mongoose.c $(CFLAGS) $(LIBS)
这个随身 Wi-Fi 的系统信息如下:
root@udx710-module:/ # uname -a
Linux udx710-module 4.14.98 #1 SMP PREEMPT Thu Jul 27 01:59:03 UTC 2023 aarch64 GNU/Linux
root@udx710-module:/ # uname -r
4.14.98
oot@udx710-module:/ # /lib/libc-2.27.so
GNU C Library (GNU libc) stable release version 2.27.
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version 7.2.1 20171011.
libc ABIs: UNIQUE
For bug reporting instructions, please see:
<http://www.gnu.org/software/libc/bugs.html>.
我应该如何修改 makefile ,使用交叉编译的工具链编译出 arm64 的执行文件呢?
1
AFOX 2023-08-29 18:24:53 +08:00 via Android
替换 cc ,改成交叉编译工具链 arm-linux-gcc 的路径,如果依赖其他库,需要将第三方库也改成交叉编译后的库
|
2
lhbc 2023-08-29 18:47:14 +08:00
|
3
oneisall8955 OP @AFOX makefile 里面的
CFLAGS = $(shell pkg-config --cflags glib-2.0 gio-2.0) LIBS = $(shell pkg-config --libs glib-2.0 gio-2.0) -lpthread 这两个参数不知道怎么替换 通过 x86_64 amd64 主机执行 pkg-config --cflags glib-2.0 gio-2.0 是这样子的: root@VM-12-6-ubuntu:~# pkg-config --cflags glib-2.0 gio-2.0 -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include |
4
AFOX 2023-08-29 19:10:51 +08:00 via Android
@oneisall8955 交叉编译工具链里面应该有这两个库,你试试手动指定
|
5
oneisall8955 OP @lhbc 大佬,有没有指引应该如何使用?
|
6
lhbc 2023-08-29 20:02:30 +08:00 via Android
@oneisall8955 有两个办法
一个是这个交叉编译工具链 一般来说就是 export CC=musl-arm64-cc 然后 make 但可能有大量依赖库需要你从头编译 另外一个就是用 user-qemu ,直接在 x86 跑 arm64 的二进制,配合 docker 其实很简单 就是编译性能非常受影响 我看这个仓库的代码很少,应该影响不大 推荐第二个,比较简单 |
7
msywkylemon 2023-08-29 23:12:31 +08:00
1. CC 换成你自己 toolchain 对应的
2. pkg 如果也需要换的话要手动去替换路径 pkg 手动替换的话需要设置 PKG_CONFIG_PATH 指定到自己的 pkgconfig 路径,然后修改文件夹里 *.pc 中的引用路径,或者直接用绝对路径替换掉 Cflags 里的路径; 当然你也可以选择直接修改系统(主机) pkgconfig 里的内容,两个方法我都试过 |