NSPR emscripten编译汇编文件'* .s'

时间:2018-12-12 02:16:56

标签: emscripten

在使用emscripten编译NSPR时,我遇到了问题。

emscripten不知道“ .s”后缀,并发出类似的错误

.mp4

或者,我用“ clang”编译了文件

shared:ERROR: os_Linux_x86.s: Input file has an unknown suffix, don't know what to do with it!

但是,“警戒”已经出现,

/Users/xxxxxx/Documents/workspaces/EMC/emsdk/clang/e1.38.20_64bit/clang -o os_Linux_x86.o -Wall -pthread -g -fno-inline -fPIC -UNDEBUG -DDEBUG_xxxxxx -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -DDEBUG=1 -DXP_UNIX=1 -D_GNU_SOURCE=1 -DHAVE_FCNTL_FILE_LOCKING=1 -DHAVE_POINTER_LOCALTIME_R=1 -DLINUX=1 -DHAVE_DLADDR=1 -DHAVE_LCHOWN=1 -DHAVE_SETPRIORITY=1 -DHAVE_STRERROR=1 -D_REENTRANT=1 -DFORCE_PR_LOG -D_PR_PTHREADS -UHAVE_CVAR_BUILT_ON_SEM -D_NSPR_BUILD_ -I../../../../dist/include/nspr -I../../../../pr/include -I../../../../pr/include/private -c os_Linux_x86.s

llvm-nm上的输出文件就像

shared:WARNING: object /var/folders/6d/cn41t4b56b725ych8k101yd80000gn/T/emscripten_temp_cQDqqw_archive_contents/os_Linux_x86_f787044a.o is not LLVM bitcode, cannot link

我已经将“ emar”用于静态库“ libnspr4.a”,并且可以使用。

但是 0000000000000050 T _PR_x86_AtomicAdd 0000000000000020 T _PR_x86_AtomicDecrement 0000000000000000 T _PR_x86_AtomicIncrement 0000000000000040 T _PR_x86_AtomicSet-s ERROR_ON_UNDEFINED_SYMBOLS = 0 bash-3.2$ /Users/xxxxxx/Documents/workspaces/EMC/emsdk/emscripten/1.38.20/emcc -D__i386__ -D_PR_POLL_AVAILABLE abstract.o -Xlinker -L../../dist/lib -lplc4 -L../../dist/lib -lnspr4 -lpthread -o abstract.js shared:WARNING: object /var/folders/6d/cn41t4b56b725ych8k101yd80000gn/T/emscripten_temp_HXB1yC_archive_contents/os_Linux_x86_f787044a.o is not LLVM bitcode, cannot link shared:WARNING: object /var/folders/6d/cn41t4b56b725ych8k101yd80000gn/T/emscripten_temp_HXB1yC_archive_contents/os_Linux_x86_f787044a.o is not LLVM bitcode, cannot link shared:WARNING: object /var/folders/6d/cn41t4b56b725ych8k101yd80000gn/T/emscripten_temp_HXB1yC_archive_contents/os_Linux_x86_f787044a.o is not LLVM bitcode, cannot link error: undefined symbol: _PR_x86_AtomicDecrement warning: To disable errors for undefined symbols use 我猜输出静态库未与“ os_Linux_x86函数”链接

我需要你的评论。谢谢


另外,

命令“ llvm-nm libnspr4.a”显示

error: undefined symbol: _PR_x86_AtomicIncrement error: undefined symbol: _PR_x86_AtomicSet error: undefined symbol: pthread_attr_getschedparam error: undefined symbol: pthread_attr_setinheritsched error: undefined symbol: pthread_attr_setscope error: undefined symbol: sched_get_priority_max error: undefined symbol: sched_get_priority_min error: undefined symbol: sendfile Error: Aborting compilation due to previous errors shared:ERROR: '/Users/xxxxxx/Documents/workspaces/EMC/emsdk/node/8.9.1_64bit/bin/node /Users/xxxxxx/Documents/workspaces/EMC/emsdk/emscripten/1.38.20/src/compiler.js /tmp/tmpAycNjj.txt /Users/xxxxxx/Documents/workspaces/EMC/emsdk/emscripten/1.38.20/src/library_pthread_stub.js' failed (1)

1 个答案:

答案 0 :(得分:0)

当然不会。

WebAssembly本身是目标平台,这意味着它等效于Web中的程序集。编译器绝不会将本机x86汇编代码(.s)转换为另一个目标平台。

我认为将NSPR这样的低级系统库编译为WebAssembly并不是一个好主意,因为WebAssembly当前不具有pthread之类的系统功能(嗯,Chrome支持它,但它仍是实验性功能,已被禁用)默认)。

说到clang,您应该设置一个编译器标志--target=wasm32-unknown-unknown-wasm以便将其编译为WebAssembly。 Cloudflare有a good example关于如何在WebAssembly中使用clang。