2016-06-29 6 views
1

NPAPI는 컴파일 된 바이너리를 거의 100 % 사용하기 때문에 모든 플랫폼에 대한 코드를 동시에 포함하는 플러그인을 작성하는 것이 바람직하므로 크로스 컴파일이 NPAPI 빌드 시스템의 우선 순위 기능이되는 것이 좋습니다 뼈대. 그러나 나는 맥 OS X에서 firebreath 대상 창을 크로스 컴파일 할 때 내가 얻을 :firebreath 대상 창 교차 컴파일

$ bash firebreath/prepmake.sh Codebendercc/ build.win -DCMAKE_TOOLCHAIN_FILE=$HOME/Toolchain-mingw32.cmake 
Using projects in: /path/to/project/root/Codebendercc 
Generating build files in: /path/to/project/root/build.win 
NOTE: The build files in /path/to/project/root/build.win should *NEVER* be modified directly. Make changes in cmake and re-run this script. 
/path/to/root/build.win /path/to/root 
-- The C compiler identification is GNU 4.9.3 
-- The CXX compiler identification is GNU 4.9.3 
-- Check for working C compiler: /usr/local/mingw/bin/i686-w64-mingw32-gcc 
-- Check for working C compiler: /usr/local/mingw/bin/i686-w64-mingw32-gcc -- works 
-- Detecting C compiler ABI info 
-- Detecting C compiler ABI info - done 
-- Detecting C compile features 
-- Detecting C compile features - done 
-- Check for working CXX compiler: /usr/local/mingw/bin/i686-w64-mingw32-g++ 
-- Check for working CXX compiler: /usr/local/mingw/bin/i686-w64-mingw32-g++ -- works 
-- Detecting CXX compiler ABI info 
-- Detecting CXX compiler ABI info - done 
-- Detecting CXX compile features 
-- Detecting CXX compile features - done 
!! Could not find VS DIR! 
-- Visual Studio dir: 
CMake Error at cmake/Win.cmake:126 (message): 
    FireBreath on windows requires ATL/MFC libs to be installed. Please 
    download the Microsoft DDK and install the build environments in \WinDDK 
Call Stack (most recent call first): 
    cmake/common.cmake:31 (include) 
    CMakeLists.txt:41 (include) 


-- Configuring incomplete, errors occurred! 
See also "/path/to/project/root/build.win/CMakeFiles/CMakeOutput.log". 

$HOME/Toolchain-mingw32.cmake 파일이 포함되어 그것을 우회하는 방법이

# the name of the target operating system 
SET(CMAKE_SYSTEM_NAME Windows) 

# which compilers to use for C and C++ 
SET(CMAKE_C_COMPILER /usr/local/mingw/bin/i686-w64-mingw32-gcc) 
SET(CMAKE_CXX_COMPILER /usr/local/mingw/bin/i686-w64-mingw32-g++) 
SET(CMAKE_RC_COMPILER /usr/local/mingw/bin/i686-w64-mingw32-windres) 
SET(CMAKE_AR /usr/local/mingw/bin/i686-w64-mingw32-ar CACHE FILEPATH "Archiver") 

# here is the target environment located 
SET(CMAKE_FIND_ROOT_PATH /usr/local/mingw) 

# adjust the default behaviour of the FIND_XXX() commands: 
# search headers and libraries in the target environment, search 
# programs in the host environment 
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) 
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) 
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) 

있습니까?

+0

MFC 라이브러리를 가져 오는 것은 Visual C++의 무료 Express 버전에서도 어려운 작업입니다 ... https://stackoverflow.com/questions/5543523/afxwin-h-file-is-missing-in-vc-express-edition/ 18976046 # 18976046 행운을 빌어 요! – Melebius

답변

1

ActiveX 코드가 현재 Visual Studio로만 제작할 ATL을 요구한다는 간단한 이유 때문에 Windows libs를 크로스 컴파일 할 방법이 없습니다. Windows를 실행하는 컴퓨터를 구축하고 Visual Studio (이상적으로는 Professional이지만 Express와 함께 사용할 수 있음)를 사용하는 것이 좋습니다.

문제는 해결할 수 있지만 엄청난 양의 작업이 될 것입니다. 지금까지 아무도 그 작업을 수행 할 시간이 없었습니다.

크로스 컴파일 (cross-compilation)은 좋겠지 만 FireBreath 팀 (내가 주요 개발자 임)에게는 확실히 우선 순위가 아닙니다. Windows에서 빌드하는 것은 간단한 문제이므로, 개인적으로 저는 젠킨스를 사용하여 모든 플랫폼에서 동시 빌드 작업을 실행하고 아티팩트를 수집합니다. 비용 측면에서는 ATL 의존성을 제거하는 데 필요한 것보다 훨씬 저렴합니다. 다른 사람이 나를 종속성을 제거하기위한 프레임 워크의 일부를 다시 작성하기를 원한다면 내가 확실히 불평하지 것이라고 말했다

=] 보조 노트로

, 나는 구축 할 수있는 기능을 추가 한 적이 이론적으로 ATL을 필요로하지 않는 NPAPI 버전은 ATL에 의존하는 DllRegisterServer 기능과 같은 몇 가지 요소가 여전히 있기 때문에 필요합니다. 그 기능을 추가하는 것이 더 쉬울 것입니다. 그리고 단지 모든 기능을 대체하고 파일의 액티브 X 부분을 조건부로 제외시키기위한 적절한 추상화를 제안해야합니다. 간단한 작업은 아니지만 ATL없이 전체 COM 스택을 다시 구현하는 것보다 훨씬 쉽습니다.