交叉编译firebreath目标窗口

时间:2016-06-29 07:29:27

标签: c++ cross-compiling firebreath

由于NPAPI几乎100%使用已编译的二进制文件,因此需要同时构建包含所有平台代码的插件,因此将交叉编译作为NPAPI框架的构建系统的优先级功能是有意义的。但是,当我尝试从mac os x交叉编译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)

有没有办法规避这个?

1 个答案:

答案 0 :(得分:1)

没有办法交叉编译windows libs,原因很简单,因为ActiveX代码目前需要ATL,而ATL只能用Visual Studio构建(据我所知)。我建议让一台运行Windows的构建机器使用Visual Studio(理想情况下是Professional,但它可能适用于Express)用于Windows构建。

问题很可能是可以解决的,但这将是一项巨大的工作 - 到目前为止,没有人花时间去做这项工作。

交叉编译会很好,但它肯定不是FireBreath团队的优先考虑事项(我是主要开发人员)因为在Windows上构建它是一件简单的事情。就个人而言,我使用jenkins在所有平台上运行同步构建作业并收集工件。在成本方面,这比消除ATL依赖性所需的成本要便宜得多。

那就是说,我当然不会抱怨如果有人想为我重写那部分框架来删除依赖=]

作为旁注,我从未添加过在Windows上构建NPAPI版本的功能,理论上它不需要ATL,因为仍有几个部分,例如DllRegisterServer功能,它依赖于ATL。但是,添加该功能会更容易,并且只需要您提供一个不错的抽象来替换所有这些功能,然后有条件地排除文件的activex部分;这不是一个简单的任务,但比没有ATL重新实现整个COM堆栈更容易。