nod*_*nja 11 linux gcc makefile
在Linux中我试图编译使用-fwritable-strings选项的东西.显然这是一个gcc选项,在较新版本的gcc中不起作用.我在我的系统上安装了gcc-3.4,但我认为新版本仍在使用,因为我仍然得到错误,说它无法识别命令行选项-fwritable-strings.如何才能使用旧版本的gcc?
你对使用的构建系统一无所知,但通常可以通过类似的方式显式调用旧版本的gcc(这是基于autotools的构建):
./configure CXX=g++-3.4 CC=gcc-3.4
Run Code Online (Sandbox Code Playgroud)
对于基于make的构建系统,有时这会起作用:
make CXX=g++-3.4 CC=gcc-3.4
Run Code Online (Sandbox Code Playgroud)
大多数的makefile应该认识到覆盖CC
并CXX
以这种方式.
如果您可以找到实际使用可写字符串的位置,另一种可能性是对代码实际编辑的文字字符串子集使用strdup和free 。这可能比降级 GCC 版本更复杂,但会使代码更加可移植。
编辑
为了回应下面的澄清问题/评论,如果您看到类似的内容:
char* str = "XXX";
str[1] = 'Y';
str[2] = 'Z';
// ... use of str ...
Run Code Online (Sandbox Code Playgroud)
您可以将上面的内容替换为以下内容:
char* str = strdup("XXX");
str[1] = 'Y';
str[2] = 'Z';
// ... use of str ...
free(str);
Run Code Online (Sandbox Code Playgroud)
以及您之前拥有的位置:
char* str = "Some string that isn't modified";
Run Code Online (Sandbox Code Playgroud)
您可以将上面的内容替换为:
const char* str = "Some string that isn't modified";
Run Code Online (Sandbox Code Playgroud)
假设您进行了这些修复,则不再需要“-fwritable-strings”。
归档时间: |
|
查看次数: |
20915 次 |
最近记录: |