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]
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]
まず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]
find . -name \*.o -print0 | xargs -0 rm find . -name \*.a -print0 | xargs -0 rm
nm ./test | c++filt
$ ./b2 clean $ ./b2 toolset=clang cxxflags="-stdlib=libc++" linkflags="-stdlib=libc++"
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++")
ついでにいくつかの問題がわかった
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 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
bjam --build-dir="C:\Program Files\boost\build-boost" --toolset=msvc --build-type=complete stage
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++"