【发布时间】:2011-06-01 12:44:23
【问题描述】:
下面的代码在 MSVC 中编译得很好,但是 GCC 给出了一个警告,这真的让我很烦恼:non-pic 寻址形式不适合 pic 代码。
能否告诉我这个警告的原因以及如果它确实是一个潜在的问题如何解决它?我正在使用 -fasm-blocks 编译器选项来启用 intel 样式程序集,添加 -fpic 参数没有区别。
unsigned short dataMask[] = {0x0ffff, 0x07bef, 0x039e7, 0x018e3, 0x0861, 0x020, 0,0};
void test
{
_asm
{
xor ecx, ecx // ecx == 0
//...
// value in ecx may change
//...
mov bx, [dataMask + ecx * 2]
//...
};
}
【问题讨论】:
-
"PIC 代码"?是像“ATM机”还是“PIN码”?我对 gcc 的期望会更好:-)
-
PIC 代码表示位置无关代码,需要在任何地址空间正确执行指令。代码在库中,所以我很担心这个警告......
-
@Ryan,我想你误解了我的评论 -
PIC是“位置无关代码”,PIC code,即“位置无关代码代码”是错误的,比如自动柜员机或个人识别号码号码 - 为我提供了一种奇怪的幽默感。 -
啊,现在连我都明白了:)
-
你应该加上-fno-pic,因为你使用绝对寻址,确实不适合pic
标签: visual-c++ gcc assembly inline-assembly