【问题标题】:How to fix meson generating an incorrect linker flag (--subsystem console)如何修复介子生成不正确的链接器标志(--subsystem 控制台)
【发布时间】:2020-11-19 12:06:48
【问题描述】:

我创建了一个简单的项目来让自己习惯介子,但构建一直失败。

这就是我所做的(设置环境和构建):

set CC=clang
set CC_LD=lld
set CFLAGS="--target x86_64-pc-windows-msvc"
meson build
cd build
ninja

我的meson.build如下:

project('EtaClient', 'c')
src = ['src/main.c', 'src/linkedlist.c']
executable('EtaClient', src)
target = 'x86_64-pc-windows-msvc'

在构建时,我收到以下错误(obj 文件已成功构建,但它们未链接,因此未构建 exe):

LINK : warning LNK4044: unrecognized option '/-subsystem'; ignored
LINK : fatal error LNK1181: cannot open input file 'console.obj'
clang: error: linker command failed with exit code 1181 (use -v to see invocation)

当我查看我的build.ninja 以了解发生了什么时,我发现:

build EtaClient.exe | EtaClient.pdb: c_LINKER EtaClient.exe.p/src_main.c.obj EtaClient.exe.p/src_linkedlist.c.obj
LINK_ARGS = "-Wl,/nologo" "-Wl,/release" "-Wl,/nologo" "-Wl,/DEBUG" "-Wl,/PDB:EtaClient.pdb" "-Wl,--subsystem,console" "-lkernel32" "-luser32" "-lgdi32" "-lwinspool" "-lshell32" "-lole32" "-loleaut32" "-luuid" "-lcomdlg32" "-ladvapi32"

我将"-Wl,--subsystem,console" 替换为"-Wl,/subsystem:console",构建编译成功,但每次修改meson.build 时都必须手动进行此编辑。

谁能告诉我为什么会发生这种情况,以及如何设置介子来生成正确的标志? 提前致谢。

【问题讨论】:

    标签: clang ninja meson-build


    【解决方案1】:

    在 windows 上使用 clang-cl 代替 clang 并省略链接器的定义

    set CC=clang-cl
    set CFLAGS="--target x86_64-pc-windows-msvc"
    meson build
    cd build
    ninja
    

    https://github.com/mesonbuild/meson/issues/4232

    【讨论】:

    • 我会试一试,如果有效,我会将此答案标记为已接受:)
    • 刚刚测试过,现在标志输出正确但是链接器(它自动选择lld-link)无法找到windows.lib文件(kernel32.libuser32.lib,@987654328 @等),有什么想法吗?
    • @TheMadHau5,这是windows下clang的限制见stackoverflow.com/a/58905323/14683662
    • 问题是,我已经安装了 MSVC(使用 Visual Studio 2019)。我也安装了 MSYS2,所以我会使用它来看看。
    • 注意:在我在问题中给出的环境下运行时,clang 可以与 MSVC 库一起正常工作,但介子生成的 build.ninja 文件有一个不正确的标志。但是,使用您建议的 clang-cl 环境,情况并非如此,并且找不到库。现在是凌晨 3 点左右,所以我会在早上检查 MSYS 解决方案。感谢您像您一样帮助我:)
    猜你喜欢
    • 2016-02-25
    • 2016-08-03
    • 2019-07-11
    • 1970-01-01
    • 2017-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多