使用Emscripten将C ++文件转换为wasm时出错

时间:2019-11-12 08:28:20

标签: c++ emscripten webassembly emsdk

这是此帖子Converting .cpp file to .wasm file

的后续问题

我正在尝试在Linux上使用emscripten将c ++文件转换为.wasm。我遇到了这个错误:

/home/maria/emsdk/upstream/lib/clang/10.0.0/include/ia32intrin.h:188:10: error: use of undeclared identifier '__builtin_ia32_readeflags_u32'
  return __builtin_ia32_readeflags_u32();
         ^
/home/maria/emsdk/upstream/lib/clang/10.0.0/include/ia32intrin.h:194:3: error: use of undeclared identifier '__builtin_ia32_writeeflags_u32'
  __builtin_ia32_writeeflags_u32(__f);
  ^
/home/maria/emsdk/upstream/lib/clang/10.0.0/include/ia32intrin.h:284:10: error: use of undeclared identifier '__builtin_ia32_crc32qi'
  return __builtin_ia32_crc32qi(__C, __D);
         ^
/home/maria/emsdk/upstream/lib/clang/10.0.0/include/ia32intrin.h:305:10: error: use of undeclared identifier '__builtin_ia32_crc32hi'
  return __builtin_ia32_crc32hi(__C, __D);
         ^
/home/maria/emsdk/upstream/lib/clang/10.0.0/include/ia32intrin.h:326:10: error: use of undeclared identifier '__builtin_ia32_crc32si'
  return __builtin_ia32_crc32si(__C, __D);
         ^
/home/maria/emsdk/upstream/lib/clang/10.0.0/include/ia32intrin.h:354:10: error: use of undeclared identifier '__builtin_ia32_rdpmc'
  return __builtin_ia32_rdpmc(__A);
         ^
/home/maria/emsdk/upstream/lib/clang/10.0.0/include/ia32intrin.h:360:10: error: use of undeclared identifier '__builtin_ia32_rdtscp'
  return __builtin_ia32_rdtscp(__A);
         ^
/home/maria/emsdk/upstream/lib/clang/10.0.0/include/ia32intrin.h:369:3: error: use of undeclared identifier '__builtin_ia32_wbinvd'
  __builtin_ia32_wbinvd();
  ^
In file included from sealdemo.cpp:1:
In file included from SEAL/native/src/seal/seal.h:6:
In file included from SEAL/native/src/seal/biguint.h:9:
In file included from SEAL/native/src/seal/memorymanager.h:10:
In file included from SEAL/native/src/seal/util/defines.h:62:
In file included from SEAL/native/src/seal/util/clang.h:18:
In file included from /home/maria/emsdk/upstream/lib/clang/10.0.0/include/x86intrin.h:15:
In file included from /home/maria/emsdk/upstream/lib/clang/10.0.0/include/immintrin.h:14:
/home/maria/emsdk/upstream/lib/clang/10.0.0/include/mmintrin.h:33:5: error: use of undeclared identifier '__builtin_ia32_emms'; did you mean '__builtin_isless'?
    __builtin_ia32_emms();
    ^
/home/maria/emsdk/upstream/lib/clang/10.0.0/include/mmintrin.h:33:5: note: '__builtin_isless' declared here
/home/maria/emsdk/upstream/lib/clang/10.0.0/include/mmintrin.h:33:25: error: too few arguments to function call, expected 2, have 0
    __builtin_ia32_emms();
                        ^
/home/maria/emsdk/upstream/lib/clang/10.0.0/include/mmintrin.h:50:19: error: use of undeclared identifier '__builtin_ia32_vec_init_v2si'
    return (__m64)__builtin_ia32_vec_init_v2si(__i, 0);
                  ^
/home/maria/emsdk/upstream/lib/clang/10.0.0/include/mmintrin.h:67:12: error: use of undeclared identifier '__builtin_ia32_vec_ext_v2si'
    return __builtin_ia32_vec_ext_v2si((__v2si)__m, 0);
           ^
/home/maria/emsdk/upstream/lib/clang/10.0.0/include/mmintrin.h:129:19: error: use of undeclared identifier '__builtin_ia32_packsswb'
    return (__m64)__builtin_ia32_packsswb((__v4hi)__m1, (__v4hi)__m2);
                  ^
/home/maria/emsdk/upstream/lib/clang/10.0.0/include/mmintrin.h:159:19: error: use of undeclared identifier '__builtin_ia32_packssdw'
    return (__m64)__builtin_ia32_packssdw((__v2si)__m1, (__v2si)__m2);
                  ^
/home/maria/emsdk/upstream/lib/clang/10.0.0/include/mmintrin.h:189:19: error: use of undeclared identifier '__builtin_ia32_packuswb'
    return (__m64)__builtin_ia32_packuswb((__v4hi)__m1, (__v4hi)__m2);
                  ^
/home/maria/emsdk/upstream/lib/clang/10.0.0/include/mmintrin.h:216:19: error: use of undeclared identifier '__builtin_ia32_punpckhbw'
    return (__m64)__builtin_ia32_punpckhbw((__v8qi)__m1, (__v8qi)__m2);
                  ^
/home/maria/emsdk/upstream/lib/clang/10.0.0/include/mmintrin.h:239:19: error: use of undeclared identifier '__builtin_ia32_punpckhwd'
    return (__m64)__builtin_ia32_punpckhwd((__v4hi)__m1, (__v4hi)__m2);
                  ^
/home/maria/emsdk/upstream/lib/clang/10.0.0/include/mmintrin.h:260:19: error: use of undeclared identifier '__builtin_ia32_punpckhdq'
    return (__m64)__builtin_ia32_punpckhdq((__v2si)__m1, (__v2si)__m2);
                  ^
/home/maria/emsdk/upstream/lib/clang/10.0.0/include/mmintrin.h:287:19: error: use of undeclared identifier '__builtin_ia32_punpcklbw'
    return (__m64)__builtin_ia32_punpcklbw((__v8qi)__m1, (__v8qi)__m2);
                  ^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
20 errors generated.
shared:ERROR: '/home/maria/emsdk/upstream/bin/clang++ -target wasm32-unknown-emscrip

有人可以帮忙

2 个答案:

答案 0 :(得分:0)

在构建WebAssembly时,您不能/不应该包含import time import psycopg2 def spider_opened(self, spider): hostname = 'host name' username = 'postgres username' password = 'postgres password' database = 'postgres database' self.connection = psycopg2.connect(host=hostname, user=username, password=password, dbname=database) def spider_closed(self, spider): self.cur.close() self.connection.close() def process_item(self, item, spider): self.cur = self.connection.cursor() self.cur.execute( """SELECT id FROM product WHERE url='%s' """ % item['url']) if self.cur.rowcount: result = self.cur.fetchone() self.cur.execute("""insert into product_change (id,url,new_price,"date") values (%s,%s,%s,%s) ON CONFLICT DO NOTHING""", (result[0],item['url'],item['price'],time.strftime('%Y-%m-%d'))) self.connection.commit() else: self.cur.execute("""insert into product (url,price,"data") values (%s,%s,%s) ON CONFLICT DO NOTHING""", (item['url'],item['price'],time.strftime('%Y-%m-%d'))) self.connection.commit() return item 。看来您需要在没有x86intrin.h的情况下进行构建:https://github.com/microsoft/SEAL/blob/master/native/src/seal/util/clang.h#L18

答案 1 :(得分:0)

我已经能够使用带有内在函数(#include <wasm_simd128.h>的emscripten将Microsoft SEAL库编译为WebAssembly,但这是可选的。

由于emcmake步骤始终无法找到必要的标头,并且没有优化就无法编译,因此工具链本身并没有给我这个特定的错误。

听起来您可能没有使用适当的emcmakeem++参数。此外,如果要使用内部函数,则需要在gcc.h和clang.h(位于SEAL / native / src / seal / util /中)内使用一些条件,以在wasm_simd128.h上使用x86intrin.h

请随时检查我的实现和/或构建可在Mac和Linux(Ubuntu)上编译的脚本: https://github.com/morfix-io/node-seal

或者如果您只想要一个工作库,请下载npm软件包: https://www.npmjs.com/package/node-seal