【问题标题】:Compile Telegram source code error编译电报源代码错误
【发布时间】:2016-10-25 01:38:26
【问题描述】:

当我用 Cygwin 和 NDK 编译电报源代码时,得到这个错误:

D:/TMessagesProj/jni/./libyuv/source/row_gcc.cc: In function 'void libyuv::I422AlphaToARGBRow_SSSE3(const uint8*, const uint8*, const uint8*, const uint8*, uint8*, const libyuv::YuvConstants*, int)':
D:/TMessagesProj/jni/./libyuv/source/row_gcc.cc:1803:4: error: 'asm' operand has impossible constraints
   );
    ^
make: *** [D:/TMessagesProj/obj/local/x86/objs/tmessages.22/./libyuv/source/row_gcc.o] Error 1

Error screenshot

row_gcc.cc File


编辑:从谷歌驱动文件引入的代码:

void OMITFP I422AlphaToARGBRow_SSSE3(const uint8* y_buf,
                                     const uint8* u_buf,
                                     const uint8* v_buf,
                                     const uint8* a_buf,
                                     uint8* dst_argb,
                                     const struct YuvConstants* yuvconstants,
                                     int width) {
  asm volatile (
    YUVTORGB_SETUP(yuvconstants)
    "sub       %[u_buf],%[v_buf]               \n"
    LABELALIGN
  "1:                                          \n"
    READYUVA422
    YUVTORGB(yuvconstants)
    STOREARGB
    "subl      $0x8,%[width]                   \n"
    "jg        1b                              \n"
  : [y_buf]"+r"(y_buf),    // %[y_buf]
    [u_buf]"+r"(u_buf),    // %[u_buf]
    [v_buf]"+r"(v_buf),    // %[v_buf]
    [a_buf]"+r"(a_buf),    // %[a_buf]
    [dst_argb]"+r"(dst_argb),  // %[dst_argb]
#if defined(__i386__) && defined(__pic__)
    [width]"+m"(width)     // %[width]
#else
    [width]"+rm"(width)    // %[width]
#endif
  : [yuvconstants]"r"(yuvconstants)  // %[yuvconstants]
  : "memory", "cc", NACL_R14 YUVTORGB_REGS
    "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5"
  );
}

【问题讨论】:

  • 猜测,这段代码是为 64 位编译的,而你正在编译它为 32 位。 32bit 的寄存器比 64bit 少,你快用完了。

标签: gcc cygwin row telegram cc


【解决方案1】:

我不确定是什么导致这个问题重新浮出水面,但既然如此,我将提出我的评论作为答案:

猜测,这段代码是为 64 位编译的,而你正在编译它 32 位。由于 32 位的寄存器比 64 位少,所以你用完了。由于编译器无法提供那么多寄存器,因此无法满足您的“约束”,因此会出现错误。

【讨论】:

    猜你喜欢
    • 2012-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多