【发布时间】:2012-07-22 08:50:27
【问题描述】:
这是一个我不知道从哪里开始的领域。 我正在尝试编译使用 G3Dlite 的二进制文件。 我已经遇到了一个未定义的“__decl”,我必须定义它,因为platform.h 中没有定义。 之后,编译器停止了这个错误:
./dep/include/g3dlite/G3D/AtomicInt32.h:124:44: error: impossible constraint in ‘asm’
第 124 行在这个函数中:
/** Returns zero if the result is zero after decrement, non-zero otherwise.*/
int32 decrement() {
#if defined(G3D_WIN32)
// Note: returns the newly decremented value
return InterlockedDecrement(&m_value);
#elif defined(G3D_LINUX) || defined(G3D_FREEBSD)
unsigned char nz;
asm volatile ("lock; decl %1;\n\t"
"setnz %%al"
: "=a" (nz)
: "m" (m_value)
: "memory", "cc");
return nz;
#elif defined(G3D_OSX)
// Note: returns the newly decremented value
return OSAtomicDecrement32(&m_value);
#endif
}
我不确定 Linux 上的问题是什么。此代码已在其他平台上正常检出并编译,所以我想知道这是 g3d 代码还是我的本地操作系统的问题。
arcemu@raspberrypi ~ $ uname -a && gcc --version && cmake --version
Linux raspberrypi 3.1.9+ #168 PREEMPT Sat Jul 14 18:56:31 BST 2012 armv6l GNU/Linux
gcc (Debian 4.6.3-8+rpi1) 4.6.3
cmake version 2.8.9-rc1
我阅读了许多相关帖子,这些帖子似乎表明不再支持“修改”。
谁能指出一个开始解决此问题的好地方?
谢谢。
【问题讨论】:
-
你确信内联汇编应该在 ARM 上工作吗?
标签: gcc linux-kernel inline-assembly