2015-07-14 2 views
0

В настоящее время у меня есть проект XCode (написанный на C) с использованием нескольких библиотек. Я пытаюсь преобразовать в Javscript с помощью emscripten, но у меня проблемы со всеми командами.Компиляция проекта Xcode с emscripten

Я попытался скопировать код компиляции 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 

ответ

1

То, что вы пытаетесь сделать здесь, не имеет смысла. Вам нужно отступить и подумать о том, что вы делаете.

Emscripten может только компилировать код, который уже был создан в переносном режиме. Он не может переводить код, который зависит от больших собственных библиотек, таких как CoreFoundation, AVFoundation и AudioToolbox (среди прочего) в вашем проекте. Кроме того, он не может скомпилировать код Objective-C.

0

Вам необходимо скомпилировать все библиотеки, которые использует ваш проект с помощью 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 и внешнего проект будет знать, где найти заголовки и скомпилированные библиотеки.