如何合并依赖包静态库? #3304
MasterBalll
started this conversation in
General
如何合并依赖包静态库?
#3304
Replies: 3 comments 5 replies
-
包里面的暂时不支持,你只能自己写 rule 脚本,取出所有包的库路径,然后调用下面的接口,自己 merge target("test")
after_link(function (target)
import("utils.archive.merge_staticlib")
merge_staticlib(target, "libout.a", {"libfoo.a", "libbar.a"})
end) |
Beta Was this translation helpful? Give feedback.
0 replies
-
试了下 target("try")
set_kind("static")
after_build(function (target)
import("utils.archive.merge_staticlib")
local suffix
if is_plat("windows") then
suffix = ".lib"
else
suffix = ".a"
end
local linkdirsTbl = target:get("linkdirs")
if type(linkdirsTbl) == "string" then
linkdirsTbl = {linkdirsTbl}
end
for idx, val in ipairs(linkdirsTbl) do
linkdirsTbl[idx] = path.join(val, "*"..suffix)
end
-- merge_staticlib(target, path.join(target:targetdir(), target:name().."_all"..suffix), linkdirsTbl)
merge_staticlib(target, path.join(target:targetdir(), target:name().."_all"..suffix), {"C:/Users/Dell/AppData/Local/.xmake/packages/d/dmx_signal/@default/f1fa7a02563f40769c312ca35c488477/lib/libxccDSPLib.a"})
end)
add_packages("xtcstub", "DMX_Signal", {public = true})
add_includedirs("src", {public = true})
add_headerfiles("src/*.h")
add_files("src/*.c")
target_end() 用类 gcc 编译器会报错 ar -M
error: @programdir\modules\private\async\runjobs.lua:256: @programdir\core\sandbox\modules\os.lua:373: execv(ar -M) failed(9)
stack traceback:
[C]: in function 'error'
[@programdir\core\base\os.lua:898]:
[@programdir\core\sandbox\modules\os.lua:373]:
[@programdir\core\sandbox\modules\os.lua:286]: in function 'vrunv'
[@programdir\modules\utils\archive\merge_staticlib.lua:46]: in function
'_merge_for_ar'
[@programdir\modules\utils\archive\merge_staticlib.lua:64]:
[.\xmake.lua:76]: in function 'after_build'
[@programdir\actions\build\build.lua:126]: in function 'jobfunc'
[@programdir\modules\private\async\runjobs.lua:232]:
stack traceback:
[C]: in function 'error'
@programdir\core\base\os.lua:898: in function 'os.raiselevel'
(...tail calls...)
@programdir\modules\private\async\runjobs.lua:256: in field 'catch'
@programdir\core\sandbox\modules\try.lua:123: in global 'try'
@programdir\modules\private\async\runjobs.lua:218: in upvalue 'cotask'
@programdir\core\base\scheduler.lua:404: in function <@programdir\core\base\scheduler.lua:397> 看上去与路径中的 @ 有关,换一个没有 @ 的路径是正常的。 |
Beta Was this translation helpful? Give feedback.
0 replies
-
win下,为啥会传 .a 。。库路径都不对。。而且 msvc 下,应该用的 lib.exe 不是 ar,为啥会跑进 ar? mingw 平台? 还有取包的库文件,用 |
Beta Was this translation helpful? Give feedback.
5 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
有个需求是要把最终生成的静态库提供出去,但它依赖了许多包,如何能把这些包合并到该静态库中?
尝试用
set_policy("build.merge_archive", true)
,看起来它只会对 add_deps 添加的目标依赖生效,对包依赖无效。Beta Was this translation helpful? Give feedback.
All reactions