windows下用xmake交叉编译鸿蒙.so库

直接上代码首先创建一个项目名字叫sharedTest

foo.h

cpp 复制代码
#if defined(_WIN32)
#   define __export         __declspec(dllexport)
#elif defined(__GNUC__) && ((__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3))
#   define __export         __attribute__((visibility("default")))
#else
#   define __export
#endif

__export int add(int a, int b);

foo.c

cpp 复制代码
#include "foo.h"

int add(int a, int b) {
    return a + b;
}

main.c

cpp 复制代码
#include "foo.h"
#include <stdio.h>

int main(int argc, char** argv) {
    printf("add(1, 2) = %d\n", add(1, 2));
    return 0;
}

xmake.lu

lua 复制代码
add_rules("mode.debug", "mode.release")

target("foo")
    set_kind("shared")
    add_files("src/foo.c")

target("sharedTest")
    set_kind("binary")
    add_deps("foo")
    add_files("src/main.c")

--
-- If you want to known more usage about xmake, please see https://xmake.io
--
-- ## FAQ
--
-- You can enter the project directory firstly before building project.
--
--   $ cd projectdir
--
-- 1. How to build project?
--
--   $ xmake
--
-- 2. How to configure project?
--
--   $ xmake f -p [macosx|linux|iphoneos ..] -a [x86_64|i386|arm64 ..] -m [debug|release]
--
-- 3. Where is the build output directory?
--
--   The default output directory is `./build` and you can configure the output directory.
--
--   $ xmake f -o outputdir
--   $ xmake
--
-- 4. How to run and debug target after building project?
--
--   $ xmake run [targetname]
--   $ xmake run -d [targetname]
--
-- 5. How to install target to the system directory or other output directory?
--
--   $ xmake install
--   $ xmake install -o installdir
--
-- 6. Add some frequently-used compilation flags in xmake.lua
--
-- @code
--    -- add debug and release modes
--    add_rules("mode.debug", "mode.release")
--
--    -- add macro definition
--    add_defines("NDEBUG", "_GNU_SOURCE=1")
--
--    -- set warning all as error
--    set_warnings("all", "error")
--
--    -- set language: c99, c++11
--    set_languages("c99", "c++11")
--
--    -- set optimization: none, faster, fastest, smallest
--    set_optimize("fastest")
--
--    -- add include search directories
--    add_includedirs("/usr/include", "/usr/local/include")
--
--    -- add link libraries and search directories
--    add_links("tbox")
--    add_linkdirs("/usr/local/lib", "/usr/lib")
--
--    -- add system link libraries
--    add_syslinks("z", "pthread")
--
--    -- add compilation and link flags
--    add_cxflags("-stdnolib", "-fno-strict-aliasing")
--    add_ldflags("-L/usr/local/lib", "-lpthread", {force = true})
--
-- @endcode
--

编译脚本

build.bat

bash 复制代码
@echo off
setlocal enabledelayedexpansion

:: ----------------------
:: 配置参数
:: ----------------------
:: 允许通过环境变量覆盖NDK路径(默认值D:\hmosSdk\15\native)
set NDK_PATH=!NDK_PATH!
if "!NDK_PATH!"=="" set NDK_PATH=D:\hmosSdk\15\native

:: 目标架构列表(可扩展)
set ARCH_LIST=arm64-v8a x86_64
set MODE_LIST=debug release

:: ----------------------
:: 主逻辑
:: ----------------------
cls
echo [INFO] 当前NDK路径: "%NDK_PATH%"
echo [INFO] 目标架构: %ARCH_LIST%

:: 检查xmake是否存在
where xmake >nul 2>&1
if %ERRORLEVEL% neq 0 (
    echo [ERROR] 未找到xmake命令,请确保已添加到PATH
    exit /b 1
)
:: 循环构建debug 和release
for %%m in (%MODE_LIST%) do (
:: 循环构建所有架构
	for %%a in (%ARCH_LIST%) do (
		echo.
		echo [INFO] 正在配置架构: %%a
		xmake f -p harmony -a %%a -m %%m --sdk="%NDK_PATH%"
		if !ERRORLEVEL! neq 0 (
			echo [ERROR] 配置架构 %%a 失败
			exit /b 1
		)

		echo [INFO] 正在构建架构: %%a
		xmake build
		if !ERRORLEVEL! neq 0 (
			echo [ERROR] 构建架构 %%a 失败
			exit /b 1
		)
	)
)

echo.
echo [SUCCESS] 所有架构构建完成
endlocal
相关推荐
开开心心就好39 分钟前
仅168KB的桌面图标自动隐藏工具
windows·计算机视觉·计算机外设·excel·启发式算法·宽度优先·csdn开发云
怪兽软家4 小时前
DaVinci Resolve/达芬奇 20安装教程及下载
windows·经验分享·生活
chao1898444 小时前
完整MES系统实现 (C# 客户端服务器)
服务器·windows·c#
Hello_Embed5 小时前
Windows 安装 Claude Code 并接入 模型
windows·笔记·ai编程
Muyuan19985 小时前
28.Paper RAG Agent 开发记录:修复 LLM Rerank 的解析、Fallback 与可验证性
linux·人工智能·windows·python·django·fastapi
AxureMost7 小时前
4DDiG DLL Fixe 1.0.8.2 系统DLL修复工具
windows
怣疯knight9 小时前
Windows不安装 Android Studio如何打包安卓软件
android·windows·android studio
空中海10 小时前
02. 静态逆向、Manifest 分析与 Smali 重打包
服务器·网络·windows
一拳一个娘娘腔10 小时前
告别图形化界面:基于CLI的Windows系统入侵排查与防御实战手册
windows·安全
疋瓞11 小时前
批处理_基础补充、文件和文件夹处理_02
windows