Я пытаюсь десериализовать файл в браузере (используя boost.serialization). Я скомпилировал boost с помощью emscripten, по-видимому, без проблем.
При компиляции (на самом деле, линковке) моей программы я получаю сообщение об ошибке
wasm-ld: error: unknown file type: basic_oarchive.o
Вот минимальный источник для воспроизведения проблемы
#include <iostream>
#include <fstream>
#include <boost/archive/binary_oarchive.hpp>
#include <emscripten/bind.h>
int main() {
std::cout << "Run main" << std::endl;
std::ofstream ofile("data.bin");
boost::archive::binary_oarchive oTextArchive(ofile);
return 0;
}
// Export the functions.
EMSCRIPTEN_BINDINGS(my_module) {
emscripten::function("main", &main);
}
CMakeLists.txt:
cmake_minimum_required(VERSION 2.8)
project( josef )
set(CMAKE_VERBOSE_MAKEFILE ON)
set(BoostWasm_DIR "/home/laurent/libs/boost/build_wasm")
include_directories(${BoostWasm_DIR}/include)
add_executable(josef josef.cpp)
file(GLOB boost_js "${BoostWasm_DIR}/lib/*.a")
target_link_libraries( josef ${boost_js} )
Файл basic_oarchive.hpp
находится в каталоге /home/laurent/boost/build_wasm/include/boost/archive
, но я не нашел соответствующий файл .o
.
Вопросы:
- где
basic_oarchive.o
? - , почему emscripten пытается использовать файл
.o
вместо .a
? - Как исправить проблема?
РЕДАКТИРОВАТЬ: Это, вероятно, та же проблема: https://github.com/emscripten-core/emscripten/issues/9721