Linux、Windows、Macの3つのシステムでBoostライブラリをコンパイル

13401 ワード

2014-09-30さらに


fatal error LNK1112: module machine type 'x64' conflicts with target machine type 'X86'
Check: Project Properties -> Configuration Properties -> Linker -> Command line.
"Additional Options"should NOT contain  /machine:X86
I have such key, generated by CMake output: CMake generated x86 project, then I added x64 platform via  Configuration Manager  in Visual Studio 2010 - everything was updated fine except linker command line, specified  /machine:X86  separately.
Linker error LNK1104 with 'libboost_filesystem-vc100-mt-s-1_49.lib'

1.起因


bgslibraryをコンパイルする必要があります.OpenCVを使用しました.プラットフォームをまたいでファイルを巡るためにboost filesystemを使いました.
BoostライブラリはBoostを使用する.Buildはプラットフォーム間コンパイルツールとして使用されます.CMakeに相当しますか?

2. Linux


基本チュートリアルに従って、何の問題もありません.
Getting Started on Unix variants (e.g. Linux, MacOS)

3. Windows


まずboost default build with shared library output. from Linker error LNK1104 with 'libboost_filesystem-vc100-mt-s-1_49.lib'
bgslibraryが付属するVS.projectのデフォルトの静的接続(/MTオプション)
次に、/MDに変更してもunresovled referenceエラーが発生します.64ビットの問題だと疑っています.
b 2 architecture=x 86 address-model=64 stageで再コンパイルして、解決!!
結論:Windows下Boostデフォルトコンパイル32ビットの動的リンクライブラリバージョン

4. Mac


Mac MLには、libstdc++(GNU C)とlibc++(clang)の2つの標準C++ライブラリが含まれています.MacPortsでコンパイルされたboostとOpenCVはlibstdc++にデフォルトで接続されています.
最終コンパイルに成功したコマンドライン
./bootstrap.sh --with-toolset=clang --prefix=./build-boost155/./b2 --build-dir=`pwd`/build-boost155/build/--stagedir=`pwd`/build-boost155/stage/ toolset=clang cxxflags="-std=c++11 -stdlib=libc++" linkflags="-stdlib=libc++" define=BOOST_SYSTEM_NO_DEPRECATED install
ダイナミックライブラリ接続がlibc++かlibstdc++かを表示できます.
otool -L/opt/local/lib/libboost_filesystem-mt.dylib  otool -L/opt/local/lib/libboost_filesystem-mt.a
How do I compile boost for OS X 64b platforms with stdlibc++?
find . -name \*.o -print0 | xargs -0 rm find . -name \*.a -print0 | xargs -0 rm
nm ./test | c++filt

How to compile/link Boost with clang++/libc++?
$ ./b2 clean $ ./b2 toolset=clang cxxflags="-stdlib=libc++" linkflags="-stdlib=libc++"

You need to rebuild boost using clang++ -stdlib=libc++.
Why can't clang with libc++ in c++0x mode link this boost::program_options example?

4.1 OpenCV 2.4.8 with C++11 on OS X 10.8.5


CMakeListsを直接修正したような印象です.txtのCMAKE_C_FLAGSまたはCMAKE_CXX_FLAGSは役に立たない.cmake-gui手動選択/usr/bin/clangとGUIに-std=c++11-stdlib=libc++を記入するようです
OpenCV with C++11 on OS X 10.8
 message("Setting up Xcode for C++11 with libc++.")
 set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++0x")
 set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")

opencv for ios 5.1 (on OS X 10.8) with boost using c++11 and libc++

5.その他


ついでにいくつかの問題がわかった
CRT Library Features boost lib build configuraton variations
[lib][boost_unit_test_framework]-[vc80]-[mt]-[sgd]-[1_35][.lib]
  • lib : On Linux all files are prefixed with this
  • On Windows this prefix is not on "import libraries and DLLs"

  • boost_unit_test_framework : The library name beginning with boost_
  • vc80 : Toolset and version used to build this library
  • vc71 : Microsoft Visual C++ 2003 (version 7.1)
  • vc80 : Microsoft Visual C++ 2005 (version 8.0)

  • mt : Indicates multithreading support
  • sgd : Each letter indicates something
  • s : Static linking
  • g : Linked to debug libraries
  • y : "using a special debug build of Python"
  • d : Boost debug
  • p : Uses "the STLPort standard library"
  • n : using STLPort's deprecated "native iostreams"feature

  • 1_35 : Boost version
  • .lib : Extension varies based on convention in operating system

  • Building Boost for static linking (MinGW)
    Using libstdc++ compiled libraries with clang++ -stdlib=libc++
    混用しないほうがいい
    he libstdc++  std::string  is a different data structure than the libc++  std::string . The former is a reference counted design, whereas the latter is not. Although they are API compatible, they are not ABI compatible.

    6.疑問


    Bjamとb 2とbootstrapは同じですか?構成パラメータは同じようですが、後であります.
    bjam --build-dir="C:\Program Files\boost\build-boost" --toolset=msvc --build-type=complete stage

    Problem Linking Boost Filesystem Library in Microsoft Visual C++
    b2 --build-dir=build-directory toolset=toolset-name   stage
    ./bootstrap.sh --with-toolset=clang ./b2 toolset=clang cxxflags="-std=c++11 -stdlib=libc++" linkflags="-stdlib=libc++"
    Compile boost 1.52 C++11 clang mac 10.8.2 cannot find cstddef
    /b2 --build-dir=../boost_libs toolset=clang cxxflags="-std=c++11 -stdlib=libc++"linkflags="-stdlib=libc++"stage --with-filesystem
    Having trouble compiling boost filesystem's tutorial file