我正在Linux系统下尝试编译一个使用-fwritable-strings选项的程序。显然这是一个gcc选项,但在新版本的gcc中该选项无效。我已经在系统上安装了gcc-3.4,但我认为仍在使用更新的版本,因为我仍然收到错误提示说无法识别命令行选项-fwritable-strings。如何让make使用较旧的gcc版本?
您没有提及所使用的构建系统,但通常可以通过类似以下命令来显式地调用旧版本的gcc(这是基于autotools的构建):
./configure CXX=g++-3.4 CC=gcc-3.4
对于一个基于make的构建系统,有时候这样做是可行的:
make CXX=g++-3.4 CC=gcc-3.4
大多数Makefile应该能够以这种方式识别覆盖CC
和CXX
update-alternatives
的实用程序来处理此类情况。 但是,使用它很麻烦(下面链接到各种教程)。gcc
/g++
版本:#!/bin/bash
usage() {
echo
echo Sets the default version of gcc, g++, etc
echo Usage:
echo
echo " gcc-set-default-version <VERSION>"
echo
exit
}
cd /usr/bin
if [ -z $1 ] ; then
usage;
fi
set_default() {
if [ -e "$1-$2" ] ; then
echo $1-$2 is now the default
ln -sf $1-$2 $1
else
echo $1-$2 is not installed
fi
}
for i in gcc cpp g++ gcov gccbug ; do
set_default $i $1
done
switch-gcc
,2)将其放入您的路径中,3)使其可执行(chmod +x switch-gcc
),则可以通过运行以下命令来切换编译器版本:sudo switch-gcc 3.2
。更多关于update-alternatives
的阅读资料:
update-alternatives
是 Debian/Ubuntu 特有的东西,不是通用的 Linux 实用程序。一些发行版使用其他类似的方式来选择工具的版本,但这取决于您使用的发行版。 - Epcylonchar* str = "XXX";
str[1] = 'Y';
str[2] = 'Z';
// ... use of str ...
char* str = strdup("XXX");
str[1] = 'Y';
str[2] = 'Z';
// ... use of str ...
free(str);
而以前你有的是:
char* str = "Some string that isn't modified";
你会用以下内容替换上面的内容:
const char* str = "Some string that isn't modified";