实践篇:Install Homebrew and Boost Library 以及 Xcode配置Boost库

来源:互联网 发布:数控加工编程代码 编辑:程序博客网 时间:2024/05/21 06:59

为什么写这篇文章?
1.在安装Homebrew的时候,我去网上找过相关资料,不过都是千篇一律,都是copy来copy去的。我按照了其中几篇博文的方法,却出现了莫名其妙的问题。于是,我写了这篇文章,来帮助与我遇到同样问题的童鞋!
2.在安装boost后,xcode的配置boost库是个大问题,网上没有较为详细教程。


1.Homebrew

“Homebrew installs the stuff you need that Apple didn’t.”——Homebrew

Homebrew作为OS X上强大的包管理器,为系统软件提供了非常方便的安装方式,独特式的解决了包的依赖问题,并不再需要烦人的sudo,一键式编译,无参数困扰。 —@李惟

安装方法:
我强烈推荐上Homebrew官网去下载,网上博客给出的链接:一是不安全,二是不稳定,可能会导致homebrew装偏(我遇到的问题)。

(以下内容截至本人终端,内容可能会因机而异, 但指令一般都是一样的)

用ruby指令安装,一般OS X自带ruby:

  ~ ruby --versionruby 2.0.0p481 (2014-05-08 revision 45883) [universal.x86_64-darwin14]

将下面的指令复制到终端运行:

// 链接1ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"// 链接2ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)

正常情况下是能够安装成功的,用brew语句安装你想安装的东西试试,是否能正常运行:
举个例子, 我下载boost库。

➜  cd /usr/locallocal brew install boost

如果正常的话,应当是:

➜  local brew install boost       ==> Downloading https://homebrew.bintray.com/bottles/boost-1.60.0_2.yosemite.bottle.1.tar.gz######################################################################## 100.0%==> Pouring boost-1.60.0_2.yosemite.bottle.1.tar.gz/usr/local/Cellar/boost/1.60.0_2: 11,139 files, 436.8M

如果不正常,会出现下面的情况:

local brew install boostfatal: could not create leading directories of '/usr/local/Library/Taps/homebrew/homebrew-core': Permission deniedError: Failure while executing: git clone https://github.com/Homebrew/homebrew-core /usr/local/Library/Taps/homebrew/homebrew-core --config core.autocrlf=false --depth=1 -qError: Failure while executing: /usr/local/bin/brew tap homebrew/core -q

说明你的homebrew装偏了,具体原因我也说不出来,反正就是装失败了,这种情况下该怎么解决呢?

Of course, 进行修复:
在终端中输入下列语句:

local sudo chown -R apple:staff *➜  local brew doctor

然后就出现:

Please note that these warnings are just used to help the Homebrew maintainerswith debugging if you file an issue. If everything you use Homebrew for isworking fine: please don't worry and just ignore them. Thanks!Warning: Python is installed at /Library/Frameworks/Python.frameworkHomebrew only supports building against the System-provided Python or abrewed Python. In particular, Pythons installed to /Library can interferewith other software installs.... // 这部分内容不同电脑是不同的

待指令执行结束,homebrew也就修复好了,试着安装你想安装的软件吧~

检测homebrew是否安装:

➜  ~ cd /usr/locallocal lsCODEOFCONDUCT.md LICENSE.txt      README.md        homebrew         lib              shareCellar           Library          bin              include          opt

找到homebrew说明安装成功。

homebrew 常用操作:

brew install xxx ——安装xxx
brew uninstall xxx ——卸载xxx
brew update ——更新package
brew doctor ——修复brew

详细操作如下:

➜  ~ brewExample usage:  brew [info | home | options ] [FORMULA...]  brew install FORMULA...  brew uninstall FORMULA...  brew search [foo]  brew list [FORMULA...]  brew update  brew upgrade [FORMULA...]  brew pin/unpin [FORMULA...]Troubleshooting:  brew doctor  brew install -vd FORMULA  brew [--env | config]Brewing:  brew create [URL [--no-fetch]]  brew edit [FORMULA...]  https://github.com/Homebrew/homebrew/blob/master/share/doc/homebrew/Formula-Cookbook.mdFurther help:  man brew  brew home

2.Boost库的安装

首先,贴出我在网上找到的方法:(不推荐反正我是失败了!!!)

新手看看就好,最好不要试,如果你成功了,求指点~

安装Boost C++ Libraries.安装步骤如下:

1.在www.boost.org下载最新的Boost C++ Libraries,目前为55版本 http://jaist.dl.sourceforge.net/project/boost/boost/1.55.0/boost_1_55_0.tar.gz
2.解压后,cd boost_155_0 目录;
3../bootstrap.sh,默认的位置是在usr/local下面;
4../b2 install,进行安装;
大约需要40分钟。
最好使用最高权限来进行安装

在官网下载压缩包然后在本地解压,运行相关指令安装。起初在没用brew的情况下我也是用这种方法进行安装的。也许是我没有开到最高权限,导致安装后只找到头文件,没有找到library。有冒险精神的童鞋可以试试用sudo试着安装。还是那句话,如果成功,求指导~

下面的方法便是我极力推荐的: 用brew安装
(如果你没有安装过homebrew, 那赶紧按照我上面的方法安装吧~)

如果之前安装过boost,不过出现了和我一样的情况(只有Header而没有Library),那么首先需要将原来安装的boost移除:

local rm -r /usr/local/include/boost 

然后执行安装指令:

➜  local brew install boost       ==> Downloading https://homebrew.bintray.com/bottles/boost-1.60.0_2.yosemite.bottle.1.tar.gz######################################################################## 100.0%==> Pouring boost-1.60.0_2.yosemite.bottle.1.tar.gz/usr/local/Cellar/boost/1.60.0_2: 11,139 files, 436.8M

指令结束后,boost库也就安装完成了。

检测boost库是否安装成功:
(1)Header:

local cd includeinclude lsboost

boost的头文件已安装;

(2)Library:

➜  ~ cd /usr/local/lib➜  lib lslibACE-5.6.9.dylib                    libboost_graph-mt.a                   libboost_random.dyliblibACE.dylib                          libboost_graph-mt.dylib               libboost_regex-mt.alibACEXML-5.6.9.dylib                 libboost_graph.a                      libboost_regex-mt.dyliblibACEXML.dylib                       libboost_graph.dylib                  libboost_regex.alibACEXML_Parser-5.6.9.dylib          libboost_iostreams-mt.a               libboost_regex.dyliblibACEXML_Parser.dylib                libboost_iostreams-mt.dylib           libboost_serialization-mt.alibCoreUtils.dylib                    libboost_iostreams.a                  libboost_serialization-mt.dyliblibImplAntiphishing.dylib             libboost_iostreams.dylib              libboost_serialization.alibImplAntivirus.dylib                libboost_locale-mt.a                  libboost_serialization.dyliblibImplBackupClient.dylib             libboost_locale-mt.dylib              libboost_signals-mt.alibImplBrowser.dylib                  libboost_log-mt.a                     libboost_signals-mt.dyliblibImplDesktopSharing.dylib           libboost_log-mt.dylib                 libboost_signals.alibImplFirewall.dylib                 libboost_log.a                        libboost_signals.dyliblibImplHDEncryption.dylib             libboost_log.dylib                    libboost_system-mt.alibImplInstantMessenger.dylib         libboost_log_setup-mt.a               libboost_system-mt.dyliblibImplP2p.dylib                      libboost_log_setup-mt.dylib           libboost_system.alibImplPatchManagementAgent.dylib     libboost_log_setup.a                  libboost_system.dyliblibImplSoftwareProduct.dylib          libboost_log_setup.dylib              libboost_test_exec_monitor-mt.alibImplSystemManagement.dylib         libboost_math_c99-mt.a                libboost_test_exec_monitor.alibImplUrlFiltering.dylib             libboost_math_c99-mt.dylib            libboost_thread-mt.alibImplVirtualMachine.dylib           libboost_math_c99.a                   libboost_thread-mt.dyliblibImplVpnClient.dylib                libboost_math_c99.dylib               libboost_timer-mt.alibInodePortalPt.dylib                libboost_math_c99f-mt.a               libboost_timer-mt.dyliblibInodeSecurityAuth.dylib            libboost_math_c99f-mt.dylib           libboost_timer.alibInodeUtility.dylib                 libboost_math_c99f.a                  libboost_timer.dyliblibInodeX1Pt.dylib                    libboost_math_c99f.dylib              libboost_type_erasure-mt.alibOesisCore.dylib                    libboost_math_c99l-mt.a               libboost_type_erasure-mt.dyliblibboost_atomic-mt.a                  libboost_math_c99l-mt.dylib           libboost_type_erasure.alibboost_atomic-mt.dylib              libboost_math_c99l.a                  libboost_type_erasure.dyliblibboost_chrono-mt.a                  libboost_math_c99l.dylib              libboost_unit_test_framework-mt.alibboost_chrono-mt.dylib              libboost_math_tr1-mt.a                libboost_unit_test_framework-mt.dyliblibboost_chrono.a                     libboost_math_tr1-mt.dylib            libboost_unit_test_framework.alibboost_chrono.dylib                 libboost_math_tr1.a                   libboost_unit_test_framework.dyliblibboost_container-mt.a               libboost_math_tr1.dylib               libboost_wave-mt.alibboost_container-mt.dylib           libboost_math_tr1f-mt.a               libboost_wave-mt.dyliblibboost_container.a                  libboost_math_tr1f-mt.dylib           libboost_wserialization-mt.alibboost_container.dylib              libboost_math_tr1f.a                  libboost_wserialization-mt.dyliblibboost_context-mt.a                 libboost_math_tr1f.dylib              libboost_wserialization.alibboost_context-mt.dylib             libboost_math_tr1l-mt.a               libboost_wserialization.dyliblibboost_coroutine-mt.a               libboost_math_tr1l-mt.dylib           libdnet.0.0.0.dyliblibboost_coroutine-mt.dylib           libboost_math_tr1l.a                  libdnet.0.dyliblibboost_coroutine.a                  libboost_math_tr1l.dylib              libdnet.dyliblibboost_coroutine.dylib              libboost_prg_exec_monitor-mt.a        libwx_base_carbon-2.8.0.dyliblibboost_date_time-mt.a               libboost_prg_exec_monitor-mt.dylib    libwx_base_carbon_net-2.8.0.dyliblibboost_date_time-mt.dylib           libboost_prg_exec_monitor.a           libwx_base_carbon_xml-2.8.0.dyliblibboost_date_time.a                  libboost_prg_exec_monitor.dylib       libwx_mac_adv-2.8.0.dyliblibboost_date_time.dylib              libboost_program_options-mt.a         libwx_mac_aui-2.8.0.dyliblibboost_exception-mt.a               libboost_program_options-mt.dylib     libwx_mac_core-2.8.0.dyliblibboost_exception.a                  libboost_program_options.a            libwx_mac_html-2.8.0.dyliblibboost_filesystem-mt.a              libboost_program_options.dylib        libwx_mac_qa-2.8.0.dyliblibboost_filesystem-mt.dylib          libboost_random-mt.a                  libwx_mac_richtext-2.8.0.dyliblibboost_filesystem.a                 libboost_random-mt.dylib              libwx_mac_xrc-2.8.0.dyliblibboost_filesystem.dylib             libboost_random.a                     tables.dat

从输出内容可以看出有很多libboost_…,说明boost的库已安装成功。

下面就来试试boost库吧:

# include <iostream># include <cstdlib># include <boost/filesystem.hpp>using namespace std;int main(void) {    int a = system("mkdir Mac");    cout << a << endl;    return 0;}

我要使用boost中的filesystem, 要编译这段代码,需要进行库的链接等操作。
首先我先查看编译器搜索头文件的路径:

➜  ~ c++ -x c++ -v -E /dev/null Apple LLVM version 6.1.0 (clang-602.0.53) (based on LLVM 3.6.0svn)Target: x86_64-apple-darwin14.5.0Thread model: posix "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang" -cc1 -triple x86_64-apple-macosx10.10.0 -E -disable-free -disable-llvm-verifier -main-file-name null -mrelocation-model pic -pic-level 2 -mdisable-fp-elim -masm-verbose -munwind-tables -target-cpu core2 -target-linker-version 242.2 -v -dwarf-column-info -resource-dir /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/6.1.0 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk -stdlib=libc++ -fdeprecated-macro -fdebug-compilation-dir /Users/apple -ferror-limit 19 -fmessage-length 125 -stack-protector 1 -mstackrealign -fblocks -fobjc-runtime=macosx-10.10.0 -fencode-extended-block-signature -fcxx-exceptions -fexceptions -fmax-type-align=16 -fdiagnostics-show-option -fcolor-diagnostics -o - -x c++ /dev/nullclang -cc1 version 6.1.0 based upon LLVM 3.6.0svn default target x86_64-apple-darwin14.5.0ignoring nonexistent directory "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/c++/v1"ignoring nonexistent directory "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/local/include"ignoring nonexistent directory "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/Library/Frameworks"#include "..." search starts here:#include <...> search starts here: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/6.1.0/include /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/System/Library/Frameworks (framework directory)End of search list.# 1 "/dev/null"# 1 "<built-in>" 1# 1 "<built-in>" 3# 326 "<built-in>" 3# 1 "<command line>" 1# 1 "<built-in>" 2# 1 "/dev/null" 2

从输出内容可以看到,查找路径如下:

#include "..." search starts here:#include <...> search starts here: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/6.1.0/include /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/System/Library/Frameworks (framework directory)

查找路径中并没有/usr/local/include 与 /usr/local/lib,所以需要在g++中加入一些指令:

g++ main.cpp -L/usr/local/lib -I/usr/local/include -lboost_filesystem -lboost_system

这样也就编译成功了~

对于Xcode,按上面的指令安装完boost后还要进行设置,比较复杂:

(以我要使用的”boost::filesystem”为例, 其它的可以类推)

(以下图片皆为原创,转载请注明出处)

假如我们要编译含<boost/filesystem.hpp>头文件的代码:
main函数

然后command+run, 有下面的错误提示
缺失头文件

错误信息表明,编译器不能找到<boost/filesystem.hpp>的头文件!那么说明boost库及头文件所在位置不在编译器搜索范围内!那么我们就要对xcode进行设置,增加搜索路径
步骤一:找到Bulid Settings
步骤二:找到Library Search Paths
步骤三:单击或双击方框中的位置
步骤四:增加方框中的内容

解决方案

步骤五:找到Header Search Paths
步骤六:点击或双击方框中的位置
步骤七:增加方框中的内容

解决方案

至此,便完成了增加头文件的操作。然后再次编译,但又出现下列错误信息
缺失lib

错误信息表明,编译器不能找到boost库,也就是说,boost库不在编译器搜索的路径当中,因此需要再对xcode进行设置,增加库搜索路径:
步骤一: 找到Build Phases
步骤二:找到Link Binary With Libraries
步骤三:点击+号

解决方案

我们发现因为方框内搜索不到boost, 因此执行步骤四/五:
步骤四/步骤五:点击 Add Other…

解决方案

步骤六:因为库文件无法直接通过Add other弹出的窗口找到,所以调出”前往文件夹“的窗口(快捷键: command+shift+G), 然后输入方框内的内容
解决方案

步骤七:找到并添加libboost_system-mt.dylib
解决方案

步骤八:找到并添加libboost_filesystem-mt.dylib
解决方案

添加完这两个lib后,代码就能正常编译啦~
完成

以上就是我总结的内容,但是毕竟是我个人实践的,并不具有普遍性。如果你在我的文章中不能寻求到解决问题的方法,我提供给你另一篇我个人觉得挺不错的文章~或者你也可以google。

推荐:
Mac上Homebrew的使用 (Homebrew 使 OS X 更完整)

其它链接:
https://github.com/Homebrew/legacy-homebrew
https://github.com/Homebrew/legacy-homebrew


以上内容皆为本人观点,欢迎大家提出批评和指导,我们一起探讨!


3 0
原创粉丝点击