GCC:-DVAR = -linux无法正常运行在Linux上
问题描述:
我有以下的C程序:GCC:-DVAR = -linux无法正常运行在Linux上
test.c的
#include <stdio.h>
#define DEF0(v) #v
#define DEF(v) DEF0(v)
int main()
{
printf("RUNNING... %s\n", DEF(VAR));
}
编译
gcc -DVAR=-linux test.c
跑步
./a.out
给出
RUNNING... -1
ASM输出
.file "test.c"
.section .rodata.str1.1,"aMS",@progbits,1
.LC0:
.string "-1"
.LC1:
.string "RUNNING... %s\n"
.text
.p2align 4,,15
.globl main
.type main, @function
main:
.LFB11:
.cfi_startproc
movl $.LC0, %esi
movl $.LC1, %edi
xorl %eax, %eax
jmp printf
.cfi_endproc
.LFE11:
.size main, .-main
.ident "GCC: (GNU) 4.4.7 20120313 (Red Hat 4.4.7-4)"
.section .note.GNU-stack,"",@progbits
-linu
或-linuxx
不会引起这种问题,但-linux/
呢。周围用引号-DVAR="-linux"
没有帮助。
问题也可以在gcc 6和7上看到。在cygwin上,所有东西都可以正常工作。 我不知道它是一个错误还是我做错了什么。
答
您可以通过使用-undef
,编译目标文件时,抑制系统 - 或GCC特定宏的定义:
gcc -undef -c -DVAR=-linux test.c
gcc test.o -o test
然后当您希望您的宏应该工作。 但是,请注意,您不能使用任何这些预定义的宏,那么您应该只将它用于那些绝对必须的对象文件。
+0
它的工作原理,谢谢:)我有'-linux'里面的路径,我通过'-D'传递,所以我无法避免它。 – ziomq1991
可能与扩展的'linux'宏有冲突。 –
这个宏的目的是什么?它应该解决的实际问题是什么?也许你应该将宏扩展定义为一个字符串开始? –
我有'-linux'里面的路径,我通过'-D',所以我无法避免它。 – ziomq1991