Manjaro用户AUR安装Discord时libc++编译测试失败求助
先还原你的错误场景:你在Manjaro上通过AUR安装libc++,过程中测试用例执行失败,具体是3个和locale相关的测试出现断言错误,进程退出码为-6,最终导致编译终止。错误详情如下:
命令: ['/tmp/yaourt-tmp-lulz/aur-libc++/src/build/projects/libcxx/test/std/localization/locale.categories/facet.numpunct/locale.numpunct.byname/Output/thousands_sep.pass.cpp.exe']
退出码: -6
标准错误:
-- thousands_sep.pass.cpp.exe: /tmp/yaourt-tmp-lulz/aur-libc++/src/llvm/projects/libcxx/test/std/localization/locale.categories/facet.numpunct/locale.numpunct.byname/thousands_sep.pass.cpp:66: int main(): 断言`np.thousands_sep() == sep'失败。
-- 编译测试意外失败!
******************** 测试时长: 7029.08s ********************
失败测试用例(3个):
libc++ :: std/localization/locale.categories/category.monetary/locale.money.get/locale.money.get.members/get_long_double_fr_FR.pass.cpp
libc++ :: std/localization/locale.categories/category.monetary/locale.money.put/locale.money.put.members/put_long_double_fr_FR.pass.cpp
libc++ :: std/localization/locale.categories/facet.numpunct/locale.numpunct.byname/thousands_sep.pass.cpp
预期通过: 5748
预期失败: 7
不支持的测试: 116
意外失败: 3
测试中存在4个警告。
FAILED: projects/libcxx/test/CMakeFiles/check-cxx
cd /tmp/yaourt-tmp-lulz/aur-libc++/src/build/projects/libcxx/test && /usr/bin/python2.7 /tmp/yaourt-tmp-lulz/aur-libc++/src/build/./bin/llvm-lit -sv /tmp/yaourt-tmp-lulz/aur-libc++/src/build/projects/libcxx/test
ninja: 构建停止: 子命令失败。
下面是几个针对性的解决办法:
1. 跳过libc++的测试用例安装
这类测试失败大多是系统locale环境和测试预期不匹配导致的,不会影响libc++本身的功能使用。你可以修改PKGBUILD来跳过测试:
- 打开libc++的AUR包目录,找到
PKGBUILD文件 - 定位到
cmake配置部分,添加-DLIBCXX_BUILD_TESTS=OFF参数,修改后的cmake命令示例:
cmake -G Ninja ../llvm \ -DCMAKE_INSTALL_PREFIX=/usr \ -DLIBCXX_BUILD_TESTS=OFF \ # 保留其他原有参数
- 之后重新运行
makepkg -si,或者用你常用的AUR helper(如yaourt、yay)重新安装
2. 修复系统locale配置
错误里的测试用例涉及fr_FR locale,可能你的系统没有正确生成对应的locale文件:
- 先检查系统已安装的locale:
locale -a,确认是否存在fr_FR.UTF-8 - 如果没有,生成该locale:
sudo locale-gen fr_FR.UTF-8 sudo update-locale
- 生成完成后,重新尝试安装libc++
3. 用AUR helper直接跳过测试
如果你用yay这类灵活的AUR工具,可以直接在安装时加参数跳过测试环节:
yay -S libc++ --mflags "--nocheck"
--nocheck参数会告诉makepkg跳过包的检查/测试步骤,直接完成安装
内容的提问来源于stack exchange,提问作者Erwan ROUSSEL

