根据Emscripten Docs
生成链接的LLVM位码。它不会在链接期间自动生成JavaScript,因为所有文件都必须使用相同的优化和编译器选项进行编译--在从bitcode到JavaScript的最终转换中这样做是有意义的。
这很好,也是我想做的但是,运行Emscripten来编译openjpeg .jp2库会生成5-6mb范围内的4个未压缩(-O0) .js文件,以及三个相同的514‘t字节码.so文件,这些文件似乎不包含我需要的代码。当我在emcc中运行它们时,它们以141 as的形式出现,没有_main函数或任何可识别的东西,而且它们的行为与其他.js文件不同。
使用emmake 命令(而不是.js文件)生成正确的字节码需要更改什么?
emcmake cmake完成ok,然后emmake make工作,但我没有选择尝试各种优化或emcc通常会提供的任何选项。
我在Win 8下的vbox中尝试在Lubuntu15.04上编译,这是我的第一个除了教程之外的emscripten项目。我也不太熟悉c或c++或一般的编译(虽然我可以将这个项目编译成没有问题的Linux应用程序)。
我知道j2k.js,但我在找obj_compress,而不是obj_decompress。
发布于 2020-06-26 05:37:29
我不确定emcmake或emmake的使用情况,但我处理了一个基于CMAKE的C++项目,该项目是一个主要的可执行文件,用于在linux上编译为x86_64可执行文件,并将其转换为emscriptem以便将其部署到Nginx服务器上。
CMAKE交叉编译+目标平台和ouput =工具链文件+链接器标志+编译器标志
openjpeg.jp2项目是一个CMAKE /C++程序。
在这里,您正试图从主机 linux x86与GCC交叉编译C/C++库或可执行文件,例如,也可以是WindowsE 29+E 110VisualE 211E 112C++编译器。
工具链文件
您需要一个CMAKE工具链文件,它将告诉CMAKE如何使用emscriptem工具,包括emscriptem编译器,以及生成JS或WebAssembly的链接器。
编译器标志
同样,我不知道emmake/emcmake的具体内容,但是如果您的项目是基于CMAKE的,那么工具链文件应该告诉CMAKE编译程序所需的所有信息。
Emscriptem链接器标志:选择本机JS或WebAssembly输出
CMakelists.txt,指定emscriptem链接器标志,并基于JS_ONLY选项选择JS或WebAssembly作为输出:
cmake_minimum_required(VERSION 3.6)
message( "Current dir: ${CMAKE_CURRENT_LIST_DIR}" )
#make sure it is all static
SET(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
SET(BUILD_SHARED_LIBRARIES OFF)
option(JS_ONLY "Compiles to native JS (No WASM)" OFF)
add_executable( myProgram main.cpp)
target_link_libraries( myProgram ${API_LIB})
target_compile_features(myProgram PRIVATE cxx_std_14)
if(JS_ONLY)
message(STATUS "Setting compilation target to native JavaScript")
set(CMAKE_EXECUTABLE_SUFFIX ".js")
set_target_properties(myProgram PROPERTIES LINK_FLAGS "--emrun -s EXPORTED_FUNCTIONS='[_main]'")
else(JS_ONLY)
message(STATUS "Setting compilation target to WASM")
set(CMAKE_EXECUTABLE_SUFFIX ".wasm.js")
set_target_properties(myProgram PROPERTIES LINK_FLAGS "--emrun -s WASM=1 -s BINARYEN_METHOD='native-wasm' -s EXPORTED_FUNCTIONS='[_main]' -s NO_EXIT_RUNTIME=1 -s EXTRA_EXPORTED_RUNTIME_METHODS=['ccall']")
endif(JS_ONLY)
#- Compiling to emscriptem/js output: PROPERTIES LINK_FLAGS set to --emrun -s
#- Compiling to emscriptem/WASM => webAssembly output: PROPERTIES LINK_FLAGS set to --emrun -s WASM=1 -s BINARYEN_METHOD='native-wasm'Note WebAssembly是您使用EmscriptEm获得的最低输出级别,理论上应该比JS更紧凑。
定制Cmakelist.txt
在这个特定的项目中,重用我前面给出的示例CMakeLists.txt并定制它:
set_target_properties(... PROPERTIES LINK_FLAGS "--emrun -s <emscript em link flags as described above>)set(CMAKE_C_FLAGS_DEBUG "-O0 -ggdb -Wall -Wunused-variable -Wno-unused-parameter -fno-inline ... etc ...etc ...")
set(CMAKE_C_FLAGS_RELEASE "-O2 -Wno-format-security -Wno-format-nonliteral -Wall -Wunused-variable -Wno-unused-parameter")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} [+ optional extra flags for both here...]"运行cmake配置
现在是使用工具链文件的时候了:
cmake -DCMAKE_BUILD_TYPE:string="Release" -DCMAKE_TOOLCHAIN_FILE=Toolchain-Emscripten.cmake src/"将src/替换为源目录。
我还没有尝试在openjpeg项目上运行这个项目,但我认为这应该会使您走上正确的轨道。迭代这个,直到它工作为止。我有一个工作的库和执行程序,使用的正是这样,不再;-)
这是一个基于CMAKE的项目,它看起来设计得很好,看起来很模块化,因此我会坚持使用CMAKE +交叉编译工具链文件,并将make/emmake的细节留给.除非你真的别无选择。
希望这能有所帮助!
罗曼
https://stackoverflow.com/questions/31567870
复制相似问题