![在 Arch Linux 上从源代码构建包](https://linux22.com/image/114588/%E5%9C%A8%20Arch%20Linux%20%E4%B8%8A%E4%BB%8E%E6%BA%90%E4%BB%A3%E7%A0%81%E6%9E%84%E5%BB%BA%E5%8C%85.png)
我最近在我的桌面 PC 上设置了 Arch linux 作为一个夏天的项目,我正在尝试弄清楚如何从源代码安装程序。根据我收集的信息,我必须获取 tarball 文件,将其解压缩,运行 ./configure,然后 make 和 make-install。我可以通过 ./configure,但是当我尝试运行 make 命令来安装代码块时,我得到了看起来像是一大堆编译器错误的信息。
根据 codeblocks wiki 上的指南,我必须先安装 wxGTK2-2.8.12,然后才能安装 codeblocks 本身,它告诉我运行
../configure --prefix=/opt/wx/2.8 --enable-xrc --enable-monolithic --enable-unicode
对我来说这似乎工作正常,这里是终端输出。
然后我尝试从同一个文件夹运行 make,输出非常广泛,很抱歉读起来很痛苦,但错误在最后,只是不确定您是否需要查看以前的输出,所以这里是整个 make 输出。
答案1
构建日志中的所有编译错误均采用以下形式:
error: narrowing conversion of ‘ddd’ from ‘int’ to ‘char’ inside { } [-Wnarrowing]
还有很多其他编译器诊断,但它们都是警告,而不是错误,您可以忍受。
这些错误是由于以下事实引起的:wxGTK2-2.8.12
- 2011 年 3 月发布 - 被编写为编译为较早的 C++ 标准(C++98,即 C++ 1998),而不是编译器默认的标准g++
,现在是 2017 年 7 月。我假设编译器是g++
6 或更高版本,默认为 C++14 (C++ 2014)。自 C++11 标准以来,破坏构建的缩小转换已被判定为格式错误,而以前并非如此。
您可以g++
通过传递选项来直接根据您选择的 C++ 标准进行编译-std={c++98|c++03|c++11|c++14|c++17}
,并且可以通过将您的选择包含在参数 forwxGTK2-2.8.12
configure
的值中来将您的选择传递给脚本。 或之一将消除缩小转换错误,例如CXXFLAGS
./configure
-std=c++98
-std=c++03
../configure CXXFLAGS=-std=c++03 --prefix=/opt/wx/2.8 --enable-xrc --enable-monolithic --enable-unicode
或者,您可以直接直接g++
抑制由 表示的诊断
-Wnarrowing
:
../configure CXXFLAGS=-Wno-narrowing --prefix=/opt/wx/2.8 --enable-xrc --enable-monolithic --enable-unicode
任何 GNU autotools 包的脚本./configure
(例如您正在尝试构建的脚本)都将具有参数,包括:
CC C compiler command
CFLAGS C compiler flags
LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
nonstandard directory <lib dir>
CPPFLAGS C/C++ preprocessor flags, e.g. -I<include dir> if you have
headers in a nonstandard directory <include dir>
CPP C preprocessor
CXX C++ compiler command
CXXFLAGS C++ compiler flags
它们可以帮助您纠正工具链与软件包维护者在发布软件包时所期望的默认值之间的偏差。看./configure --help
。