【问题标题】:Using emscripten with CMake in a simple(?) project在一个简单(?)项目中使用 emscripten 和 CMake
【发布时间】:2015-07-03 21:30:08
【问题描述】:

所以我有一个相当简单的 C++ 程序,它使用 CGAL 并使用 CMake 构建。我可以在没有 emscripten 的情况下成功构建和运行它:

cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -G "Unix Makefiles" .
[output looks good]
make
[command works]

一切都很好,我可以运行输出,但是当我尝试像这样使用 Emscripten 时(过去对我有用):

cmake -DCMAKE_TOOLCHAIN_FILE=/home/brenden/emsdk_portable/emscripten/master/cmake/Modules/Platform/Emscripten.cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -G "Unix Makefiles" .
[output looks good]
make
main.cpp:2:10: fatal error: 'CGAL/Triangulation_3.h' file not found
#include <CGAL/Triangulation_3.h>
         ^
1 error generated.
ERROR    root: compiler frontend failed to generate LLVM bitcode, halting
make[2]: *** [CMakeFiles/cgal_test.dir/main.cpp.o] Error 1
make[1]: *** [CMakeFiles/cgal_test.dir/all] Error 2
make: *** [all] Error 2

这显然行不通。

我的 CMakeLists.txt 看起来像这样:

cmake_minimum_required(VERSION 2.8)
project(cgal_test)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(SOURCE_FILES main.cpp)
add_executable(cgal_test ${SOURCE_FILES})
target_link_libraries(cgal_test CGAL gmp)

有什么想法吗?所有的 CGAL 库和头文件都在 usr/local/ 中,所以我有点不知所措。

【问题讨论】:

  • 嗯,我可以使用 g++ main.cpp -o main -lgmp -lCGAL 但我不能使用 em++ main.cpp -o main -lgmp -lCGAL

标签: c++ cmake cgal emscripten


【解决方案1】:

嗯,所以事实证明你不能只链接库,emscripten docs 指出你“......将库构建为位码,然后将库和主程序位码一起编译为 JavaScript。”

这听起来很傻很痛苦,但我想这就是答案。

【讨论】:

  • 有道理。您的目标是具有自己的“机器代码”的嵌入式环境,因此您必须交叉编译任何库并使用静态链接,因为它在使用 javascript 的浏览器中不可用。
  • 是的,为了将来参考(如果有人关心的话)有这个 github 项目试图以一种对 emscripten 友好的方式打包 cgal github.com/marcosscriven/cgaljs
猜你喜欢
  • 2016-10-11
  • 2020-03-12
  • 2019-09-16
  • 2017-12-28
  • 2022-07-06
  • 1970-01-01
  • 2021-06-11
  • 2020-08-18
相关资源
最近更新 更多