Ubuntu 22.04.2 LTS 上的 Meson 和 clang++; ld:找不到-lstdc++

问题描述 投票:0回答:2

我一直能够通过运行以下命令使用 clang 和 clang++ 编译介子项目:

CC=clang CXX=clang++ meson setup clang-debug --buildtype=debug

我得到的输出是:

he Meson build system
Version: 1.1.0
Source dir: /home/maarten/github/psy-lib
Build dir: /home/maarten/github/psy-lib/clang-debug
Build type: native build
Project name: libpsy
Project version: 0.1
C compiler for the host machine: clang (clang 14.0.0-1ubuntu1 "Ubuntu clang version 14.0.0-1ubuntu1")
C linker for the host machine: clang ld.bfd 2.38

meson.build:1:0: ERROR: Compiler clang++ can not compile programs.

A full log can be found at /home/maarten/github/psy-lib/clang-debug/meson-logs/meson-log.txt

如果我跑步:

meson setup debug --buildtype=debug

我得到了一个工作版本,它使用 cc 和 c++ 分别编译 C 和 C++。

来自 meson-log 的 clang(++) 构建的相关部分是:

-----
Detecting compiler via: clang++ --version
compiler returned <Popen: returncode: 0 args: ['clang++', '--version']>
compiler stdout:
Ubuntu clang version 14.0.0-1ubuntu1
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin

compiler stderr:

Running command: clang++ -E -dM -
-----
Detecting linker via: clang++ -Wl,--version
linker returned <Popen: returncode: 0 args: ['clang++', '-Wl,--version']>
linker stdout:
GNU ld (GNU Binutils for Ubuntu) 2.38
Copyright (C) 2022 Free Software Foundation, Inc.
This program is free software; you may redistribute it under the terms of
the GNU General Public License version 3 or (at your option) a later version.
This program has absolutely no warranty.

linker stderr:

Sanity testing C++ compiler: clang++
Is cross compiler: False.
Sanity check compiler command line: clang++ sanitycheckcpp.cc -o sanitycheckcpp.exe -D_FILE_OFFSET_BITS=64
Sanity check compile stdout:

-----
Sanity check compile stderr:
/usr/bin/ld: cannot find -lstdc++: No such file or directory
clang: error: linker command failed with exit code 1 (use -v to see invocation)

-----

meson.build:1:0: ERROR: Compiler clang++ can not compile programs.

我认为介子试图做的是编译以下程序:

class breakCCompiler;int main(void) { return 0; }

文件(sanitycheckcpp.cc)编译为:

clang++ sanitycheckcpp.cc -o sanitycheckcpp.exe -D_FILE_OFFSET_BITS=64

但是,它失败并出现以下错误:

/usr/bin/ld: cannot find -lstdc++

我不知道出了什么问题。我将不胜感激任何帮助!

c++ c clang clang++ meson-build
2个回答
0
投票

简而言之,clang++ 正在寻找 libstd++ 的另一个版本。对我来说,简短且可能不是最佳的解决方案是安装另一个版本的 libstdc++

sudo apt install libstdc++-12-dev

安装 gcc 版本 12 可能会有所帮助。

我发现了类似的帖子/答案:“/usr/bin/ld: 找不到 -lstdc++: 没有这样的文件或目录”在运行 flutter linux 应用程序时

因此,如果您赞成这个答案,请确保赞成上面的答案,因为该答案更有深度。


0
投票

将介子更新至版本 >= 1.2

© www.soinside.com 2019 - 2024. All rights reserved.