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

静态库合并报错 #1641

Closed
OuYangPaste opened this issue Sep 6, 2021 · 4 comments
Closed

静态库合并报错 #1641

OuYangPaste opened this issue Sep 6, 2021 · 4 comments

Comments

@OuYangPaste
Copy link

描述问题

最新 dev,add_files("*.a") 链接合并所有静态库报错

错误信息

如果是xmake相关编译问题,请加上-vD参数运行,并给出完整编译输出信息以及执行的完整命令,例如:

error: @programdir/core/main.lua:279: @programdir/actions/build/main.lua:146: @programdir/core/project/target.lua:1615: unknown source file: libimp.a
stack traceback:
    [C]: in function 'error'
    [@programdir/core/base/os.lua:829]: in function 'raise'
    [@programdir/core/project/target.lua:1615]: in function 'sourcebatches'
    [@programdir/actions/build/kinds/object.lua:154]: in function 'add_batchjobs_for_object'
    [@programdir/actions/build/kinds/static.lua:180]:
    [@programdir/actions/build/build.lua:58]: in function '_add_batchjobs_builtin'
    [@programdir/actions/build/build.lua:71]: in function '_add_batchjobs'
    [@programdir/actions/build/build.lua:132]: in function '_add_batchjobs_for_target'
    [@programdir/actions/build/build.lua:169]: in function '_add_batchjobs_for_target_and_deps'
    [@programdir/actions/build/build.lua:208]: in function 'get_batchjobs'
    [@programdir/actions/build/build.lua:217]: in function 'build'
    [@programdir/actions/build/main.lua:133]:
    [C]: in function 'trycall'
    [@programdir/core/sandbox/modules/try.lua:121]: in function 'try'
    [@programdir/actions/build/main.lua:122]:
    [C]: in function 'load'
    [@programdir/core/base/task.lua:519]: in function 'run'
    [@programdir/core/main.lua:277]: in function 'cotask'
    [@programdir/core/base/scheduler.lua:365]:

stack traceback:
        [C]: in function 'error'
        @programdir/core/base/os.lua:829: in function 'raise'
        @programdir/core/main.lua:279: in function 'cotask'
        @programdir/core/base/scheduler.lua:365: in function <@programdir/core/base/scheduler.lua:362>

相关环境

  • xmake版本:v2.5.7+202109061026
  • xmake运行平台:x64 linux
  • xmake目标平台:mips linux

其他信息

  • xmake.lua
    target("test")
    set_kind("static")
    add_files("*.a")
@waruqi
Copy link
Member

waruqi commented Sep 6, 2021

必须要加个.c/cpp文件 或者显式设置 add_rules("c++") 或者直接设置merge archive的rule ,xmake源码里面找下

@OuYangPaste
Copy link
Author

xmake.lua 中增加 add_rules("c++") 或者 add_files("*.c") 后 爆以下错误:

uclibc git:(master) ✗ xmake -vD
[ 25%]: inserting.release libimp.a
error: @programdir/modules/private/async/runjobs.lua:232: @programdir/rules/utils/merge_archive/merge_archive.lua:47: object name(common.c.o) conflicts in library: /home/paste/working/project/jz_t21_sdk/Ingenic-SDK-T21-1.0.33-20200527/lib/uclibc/libimp.a
stack traceback:
    [C]: in function 'error'
    [@programdir/core/base/os.lua:829]: in function 'raise'
    [@programdir/rules/utils/merge_archive/merge_archive.lua:47]: in function '_extract_for_ar'
    [@programdir/rules/utils/merge_archive/merge_archive.lua:99]: in function '_extract'
    [@programdir/rules/utils/merge_archive/merge_archive.lua:136]: in function 'script'
    [@programdir/actions/build/kinds/object.lua:44]: in function 'jobfunc'
    [@programdir/modules/private/async/runjobs.lua:208]:
    [C]: in function 'trycall'
    [@programdir/core/sandbox/modules/try.lua:121]: in function 'try'
    [@programdir/modules/private/async/runjobs.lua:201]: in function 'cotask'
    [@programdir/core/base/scheduler.lua:365]:

stack traceback:
        [C]: in function 'error'
        @programdir/core/base/os.lua:829: in function 'raise'
        @programdir/modules/private/async/runjobs.lua:232: in function 'catch'
        @programdir/core/sandbox/modules/try.lua:127: in function 'try'
        @programdir/modules/private/async/runjobs.lua:201: in function 'cotask'
        @programdir/core/base/scheduler.lua:365: in function <@programdir/core/base/scheduler.lua:362>

如果直接 set_policy("build.merge_archive", true) 的话,错误信息和最开始一样

@waruqi
Copy link
Member

waruqi commented Sep 6, 2021

这个问题 我不是群里说过了么,目前ar合并会有重名.o冲突问题,所以不建议这么干。

或者走 #1638

@OuYangPaste
Copy link
Author

使用 merge_staticlib 合并测试没问题

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

2 participants