使用emscripten编译Xcode项目

时间:2015-07-14 21:26:01

标签: c xcode emscripten

目前,我有一个使用多个库的XCode项目(用C语言编写)。我正在尝试使用emscripten转换为Javscript,但是我遇到了所有命令的问题。

我试过复制XCode编译代码并将llvm更改为./emcc,但无济于事。这是我尝试过的。有没有人有这方面的经验?谢谢!

./emcc -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk -L/Users/myuser/Library/Developer/Xcode/DerivedData/mySwiper-gifiucyvairwgigeuhojnmfnmbyy/Build/Products/Debug -F/Users/myuser/Library/Developer/Xcode/DerivedData/mySwiper-gifiucyvairwgigeuhojnmfnmbyy/Build/Products/Debug -filelist /Users/myuser/Library/Developer/Xcode/DerivedData/mySwiper-gifiucyvairwgigeuhojnmfnmbyy/Build/Intermediates/mySwiper.build/Debug/decodetool.build/Objects-normal/x86_64/decodetool.LinkFileList -mmacosx-version-min=10.10 -fobjc-arc -fobjc-link-runtime -framework Accelerate -framework AVFoundation -framework CoreFoundation -framework Foundation -framework AudioToolbox /Users/myuser/Library/Developer/Xcode/DerivedData/mySwiper-gifiucyvairwgigeuhojnmfnmbyy/Build/Products/Debug/physicalComputation.a -Xlinker -dependency_info -Xlinker /Users/myuser/Library/Developer/Xcode/DerivedData/mySwiper-gifiucyvairwgigeuhojnmfnmbyy/Build/Intermediates/mySwiper.build/Debug/decodetool.build/Objects-normal/x86_64/decodetool_dependency_info.dat -o /Users/myuser/Library/Developer/Xcode/DerivedData/mySwiper-gifiucyvairwgigeuhojnmfnmbyy/Build/Products/Debug/decodetool

2 个答案:

答案 0 :(得分:1)

你在这里尝试做的事情没有意义。你需要退后一步思考你正在做的事情。

Emscripten只能编译已经以便携方式构建的代码。它无法转换依赖于大型本机库的代码,例如项目中的CoreFoundation,AVFoundation和AudioToolbox(以及其他)。另外,它无法编译Objective-C代码。

答案 1 :(得分:1)

您需要编译项目与emcc一起使用的所有库。 我已经使用cmake和' DCMAKE_TOOLCHAIN_FILE'成功编译了大型项目。变量来配置项目。

cmake -DCMAKE_TOOLCHAIN_FILE=$EMSCRIPTEN/cmake/Modules/Platform/Emscripten.cmake --bind -s -Wno-warn-absolute-paths --memory-init-file 0 -s DISABLE_EXCEPTION_CATCHING=0 -s ALLOW_MEMORY_GROWTH=1 /your/source/dir/mylibrary

构建库后,可以使用cmake命令

FIND_PACKAGE(mylibrary)

在外部项目中使用已编译的库。

以此帖http://www.kitware.com/blog/home/post/912

为例

您可以构建项目ITK,然后编译使用ITK的外部项目。这是外部项目的cmake示例。

cmake_minimum_required(VERSION 3.3)

SET(FLAGS "--bind -Wno-warn-absolute-paths --memory-init-file 0 -s DISABLE_EXCEPTION_CATCHING=0 -s ALLOW_MEMORY_GROWTH=1" )

SET (CMAKE_CXX_FLAGS ${FLAGS} CACHE STRING "compile flags" FORCE)
SET (CMAKE_C_FLAGS ${FLAGS} CACHE STRING "compile flags" FORCE)

set(ITK_IO_MODULES_USED 
    ITKIONIFTI
    ITKIONRRD
)
find_package(ITK COMPONENTS
    ITKCommon
    ITKIOImageBase
    ITKImageFunction
    ${ITK_IO_MODULES_USED}
)
IF(${ITK_FOUND})
    include(${ITK_USE_FILE})
ENDIF(${ITK_FOUND})

INCLUDE_DIRECTORIES(ENV{EMSCRIPTEN}/system/include/emscripten/)

SET(EXE_NAME itkImageJS)
SET(${EXE_NAME}_LIBRARIES  ${ITK_LIBRARIES})
SET(${EXE_NAME}_SOURCE ${EXE_NAME}.cxx)
add_executable(${EXE_NAME}   ${${EXE_NAME}_SOURCE})
target_link_libraries(${EXE_NAME} ${${EXE_NAME}_LIBRARIES})

FIND_PACKAGE命令将要求您使用emscripten提供已编译的ITK版本的目录,外部项目将知道在何处查找标头和已编译的库。