Boost在Mac OSX的Xcode上的移植
来源:互联网 发布:python 选股 买卖点 编辑:程序博客网 时间:2024/04/29 05:24
Mac OSX的版本是OS X 10.8.5,Xcode的版本是5.1.1
首先是安装Boost,这里我选择的是使用Homebrew安装,使用如下命令安装:
brew install boost
安装的版本是1.56.0
安装过程其实是很简单的,但是在Xcode中写测试工程的时候却遇到了一些麻烦。
我们现在来写一个简单的生产者消费者的多线程应用来测试boost,
在Xcode中File-》New-》Project,选择Command Line Tool, 点击“下一步”,Product Name写boost_test3,type选择c++,然后创建
在main.cpp文件中写入如下的内容
#include <boost/thread/thread.hpp>#include <boost/lockfree/queue.hpp>#include <iostream>#include <boost/atomic.hpp>boost::atomic_int producer_count(0);boost::atomic_int consumer_count(0);boost::lockfree::queue<int> queue(128);const int iterations = 10000000;const int producer_thread_count = 4;const int consumer_thread_count = 4;void producer(void){ for (int i = 0; i != iterations; ++i) { int value = ++producer_count; while (!queue.push(value)) ; }}boost::atomic<bool> done (false);void consumer(void){ int value; while (!done) { while (queue.pop(value)) ++consumer_count; } while (queue.pop(value)) ++consumer_count;}int main(int argc, char* argv[]){ using namespace std; cout << "boost::lockfree::queue is "; if (!queue.is_lock_free()) cout << "not "; cout << "lockfree" << endl; boost::thread_group producer_threads, consumer_threads; for (int i = 0; i != producer_thread_count; ++i) producer_threads.create_thread(producer); for (int i = 0; i != consumer_thread_count; ++i) consumer_threads.create_thread(consumer); producer_threads.join_all(); done = true; consumer_threads.join_all(); cout << "produced " << producer_count << " objects." << endl; cout << "consumed " << consumer_count << " objects." << endl;}
然后我们可以看到Xcode报错,说找不到头文件
#include <boost/thread/thread.hpp>
#include <boost/lockfree/queue.hpp>
这里我们需要配置Search Paths下面的Header Search Paths,
添加一个路径,/usr/local/Cellar/boost/1.56.0/include
然后点击Build,再次报错,这次报的是
Undefined symbols for architecture x86_64:
之类的错误,这个说明链接器找不到对应的函数的实现,所以我们要指定对应的链接库
在Build Phases中,点开Link Binary With Libraries,添加在路径/usr/local/Cellar/boost/1.56.0/lib下面的thread库libboost_thread-mt.a,然后再build,仍然报错,这次是"boost::system::system_category()", referenced from:找不到,再将libboost_system-mt.a加入到Link Binary With Libraries中,再build,可以运行了
可是运行的时候爆了错误:Thread 1: EXC_BAD_ACCESS(code = 1, address=0x1)
查了各种资料,终于知道是C++ Language Dialect和C++ Standard Library的设置问题
在Build Setting中我们可以看到C++ Language Dialect的默认设置是GNU++11[-std=gnu++11],将其改为GNU++98[-std=gnu++98],C++ Standard Library的默认设置是libc++(LLVM C++ standard library with C++11 support),将其改为libstdc++(GNU C++ standard library),再次运行就ok了,
运行结果如下:
boost::lockfree::queue is lockfree
produced 40000000 objects.
consumed 40000000 objects.
Program ended with exit code: 0
- Boost在Mac OSX的Xcode上的移植
- 在Wndows 上用CodeBlockes 写的代码移植到Mac OSX上,使用Xcode 编译
- Mac OSX上的python
- Mac OSX上的python
- Mac osX下的Xcode编程
- 假冒杀毒软件在Mac OSX上的感染过程
- opencv 在mac上xcode的安装
- Mac上安装boost库(在Xcode上)
- mac osx上有趣的工具
- 如何在Mac OSX上提取App Store上的iOS应用信息
- Boost 库在Mac上的安装步骤
- 怎么在MAC OSX机器上运行COCOS2D-X 3.9的CPP-TEST的例子
- 我开发的OSX mac应用能在xcode里面运行却无法在外部运行。求解。
- Jenkins在Mac上的使用,关于Xcode编译问题
- Scrapy 在Mac OSX 10.10 上安装错误的解决。Failed building wheel for lxml
- 在Mac OSX系统的Docker机上启用Docker远程API功能
- OSX 的文件系统 MAC
- 在PC上安装Mac OSX x86
- C++将byte转换为string(16进制)
- 求树的重心(POJ1655)
- rabbitMQ 详细介绍
- android权限大全
- c#窗体应用程序右键子菜单
- Boost在Mac OSX的Xcode上的移植
- QT Creator 里设置输入法
- android MotionEvent中getX()和getRawX()
- 各种字符串Hash函数比较
- poj 1416 Shredding Company (dfs)
- VMware虚拟机NAT模式的具体配置
- 090006 牛顿法
- pdf文件怎么免费转换成txt文件
- 中国首份融资租赁行业年度报告发布