Все ошибки компиляции в журнале сборки имеют вид:
error: narrowing conversion of ‘ddd’ from ‘int’ to ‘char’ inside { } [-Wnarrowing]
Существует множество других средств диагностики компилятора, но все они являются предупреждениями, -а не ошибки -, с которыми можно жить.
Ошибки возникают из-за того, чтоwxGTK2-2.8.12
-выпущен в марте 2011 г. -был написан для компиляции по более раннему стандарту C++ (C++98, то есть C++ 1998 )чем стандарт, который используется по умолчанию для вашего компилятора g++
,сейчас в июле 2017. Я предполагаю, что у вас есть компилятор g++
6 или более поздней версии, который по умолчанию использует C++14 (C++ 2014 ). Начиная со стандарта C++11, сужающее преобразование, которое нарушает вашу сборку был признан плохо -сформированным, чего раньше не было.
Вы можете указать g++
компилировать в соответствии со стандартом C++ по вашему выбору, передав ему опцию -std={c++98|c++03|c++11|c++14|c++17}
, и вы можете передайте свой выбор скрипту wxGTK2-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
Скрипт ./configure
любого пакета GNU autotools (, такой как вы пытаетесь сборка )будет иметь параметры, включая:
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
.
Вы можете использоватьawk
:
#! /bin/sh -
x=5678 y=1000
awk -- 'BEGIN{printf "%.3f\n", ARGV[1]/ARGV[2]}' "$x" "$y"
Будете ли вы получать 5.678
или 5,678
, будет зависеть от локали ($LC_ALL
, $LC_NUMERIC
, $LANG
переменных )и реализации awk
(, некоторые из которых будут использовать .
независимо от региона ).
В реализации GNU awk
вам необходимо передать переменную POSIXLY_CORRECT
в ее окружение, чтобы она учитывала локаль для десятичного символа системы счисления.
Это также относится к входным числам:
$ LC_ALL=fr_FR.UTF-8 POSIXLY_CORRECT=1 gawk -- 'BEGIN{
printf "%.3f\n", ARGV[1]/ARGV[2]}' 1,2 10
0,120
$ LC_ALL=fr_FR.UTF-8 POSIXLY_CORRECT=1 gawk -- 'BEGIN{
printf "%.3f\n", ARGV[1]/ARGV[2]}' 1.2 10
0,100
(в этом последнем случае 1.2
интерпретировалось как 1
, потому что при явном преобразовании строки в число (, как при использовании арифметического оператора /
здесь ), awk
анализирует как можно большую часть строки, если она составляет допустимое число, а остальное игнорирует. Это .2
не понимается в этой французской локали, поскольку десятичная система счисления там ,
, а не.
).
--
, чтобы отметить конец опций, необходим в реализации busybox awk
, которую вы, кажется, используете, поскольку она принимает опции после аргументов опций, отличных от -, что делает ее не -POSIX. совместимый. Без него вышеуказанное не сработало бы, если бы $x
или $y
были отрицательными числами.
В качестве альтернативы, вы можете снова установить $POSIXLY_CORRECT
, что заставит его анализировать свои параметры стандартным способом. Отметим, что в любом случаеbusybox awk
всегда использует .
в качестве десятичного символа системы счисления независимо от локали и независимо от $POSIXLY_CORRECT
.
вы можете использовать следующий dc
фрагмент, чтобы получить результат:
$ dc -e "3k $x 1000/p"