Articles of 提升

Canot编译使用boost的odeint的C ++

我在Ubuntu 12.04上,并且已经在/ usr / include中有了一些提升。 我做了一个 sudo apt-get install libboost-all-dev 并且也安装了很多文件。 我不想删除这个提升并从源代码安装,因为其他几个软件包依赖于Ubuntu的版本。 这是我想要运行的示例代码: #include <iostream> #include <boost/numeric/odeint.hpp> using namespace std; using namespace boost::numeric::odeint; typedef vector< double > state_type; const double sigma = 10.0; const double R = 28.0; const double b = 8.0 / 3.0; void lorenz( state_type &x , state_type &dxdt , double t […]

在不使用Epoll的Linux上升级Asio

我的印象是,boost :: asio会默认使用epoll设置,而不是select实现,但是在运行一些testing之后,看起来像我的设置正在使用select。 操作系统:RHEL 4 内核:2.6 GCC:3.4.6 我写了一个小testing程序来validation哪个反应器头被使用,看起来像使用select反应器而不是epoll反应器。 #include <boost/asio.hpp> #include <string> #include <iostream> std::string output; #if defined(BOOST_ASIO_EPOLL_REACTOR_HPP) int main(void) { std::cout << "you have epoll enabled." << std::endl; } #elif defined(BOOST_ASIO_DETAIL_SELECT_REACTOR_HPP) int main(void) { std::cout << "you have select enabled." << std::endl; } #else int main(void) { std::cout << "this shit is confusing." << […]

在testserver上,使用Select()连接的Linux TCP失败

我的问题是:我在Linux中编程接口来通过以太网控制GPIB控制器。 要做到这一点,我打开一个TCP套接字,只是发送命令到控制器。 到目前为止,这工作得很好。 我在为Interface写某种unit testing的时候出现了这个问题:为了检查我在一个单独的线程中使用了一个来自boost lib的tcp接受器,并且连接到它而不是实际的控制器。 这也正在工作,但是只要来自接口的connect()调用被阻塞。 但是,因为我需要connect()调用指定的超时,我必须连接到select()函数: // Open TCP Socket m_Socket = socket(PF_INET,SOCK_STREAM,0); if( m_Socket < 0 ) { m_connectionStatus = STATUS_CLOSED; return ERR_NET_SOCKET; } struct sockaddr_in addr; inet_aton(m_Host.c_str(), &addr.sin_addr); addr.sin_port = htons(m_Port); addr.sin_family = PF_INET; // Set timeout values for socket struct timeval timeouts; timeouts.tv_sec = SOCKET_TIMEOUT_SEC ; // const -> 5 […]

如何在Linux中添加boost库到Code :: Blocks

如何将Boot库添加到Linux Ubuntu的Code :: Blocks项目中。 例如,我想添加regex库。 我已经安装了靴子库: sudo apt-get install libboost-all-dev 完整的例子将how to将是最有价值的。

在unix上加强UDP套接字问题 – bind:已经在使用的地址

首先,我知道在同一主题上还有其他几个主题,但是我无法find那些能够帮助我的东西,所以我会试着对我的情况非常具体。 我已经build立了一个简单的UDP客户端/ UDP服务器对,负责在几个并行模拟之间发送数据。 也就是说,模拟器的每个实例都在一个单独的线程中运行,并在UDP套接字上发送数据。 在主线程中,服务器正在运行,并在模拟之间路由消息。 (对于这个问题)服务器代码的重要部分如下所示: UDPServer::UDPServer(boost::asio::io_service &m_io_service) : m_socket(m_io_service, udp::endpoint(udp::v4(), PORT_NUMBER)), m_endpoint(boost::asio::ip::address::from_string("127.0.0.1"), PORT_NUMBER) { this->start_receive(); }; void UDPServer::start_receive() { // Set SO_REUSABLE to true boost::asio::socket_base::reuse_address option(true); this->m_socket.set_option(option); // Specify what happens when a message is received (it should call the handle_receive function) this->m_socket.async_receive_from( boost::asio::buffer(this->recv_buffer), this->m_endpoint, boost::bind(&UDPServer::handle_receive, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)); }; 这在我的Windows工作站上正常工作。 事情是; 我希望能够在linux集群上运行它,这就是为什么我编译它并试图在集群节点上运行它的原因。 代码编译没有一丝困难,但是当我尝试运行它时,我得到的错误 […]

如何使用C ++ Boost库与pkg-config?

我成功编译并安装了最新版本的Boost库到我的linux机器上。 现在,我希望能够使用pkg-config来简化与GCC提供链接参数的过程。 由于我懒得手工编写我自己的.pc文件,是否有一个脚本/工具,会自动生成所需的.pc文件或以其他方式更新pkg-config与升压标志? (如果某人已经拥有该.pc文件,则也欢迎分享。)

Boost.Log在GNU / Linux下链接错误

我想testingBoost.Log库。 不幸的是,我得到链接错误。 我使用Arch Linux,我通过内置的包pipe理器pacman安装了Boost头文件和库: 提升1.54.0-3 boost-libs 1.54.0-2 当从官方网站通过g++ log.cpp -lboost_log -lpthread编译简单示例时,出现以下错误: log.cpp:(.text+0x42): undefined reference to `boost::log::v2s_mt_posix::trivial::logger::get()' log.cpp:(.text+0x9b): undefined reference to `boost::log::v2s_mt_posix::trivial::logger::get()' … 我读过为什么我的应用程序无法链接到Boost.Log? ,但我无法解决链接错误。 它只给了我提示, boost::log::v2s_mt_posix::trivial::logger::get()所在的库是静态链接的。 但是在/usr/lib/目录下,只有dynamic连接的扩展名为.so Boost库。 也许,有人知道这里有什么问题。 谢谢。

在类中使用静态互斥

我有一个class,我可以有很多的实例。 它内部创build并初始化一些来自第三方库(使用一些全局variables)的成员,并且不是线程安全的。 我想过使用静态boost :: mutex,这将被locking在我的类的构造函数和析构函数。 因此,在我的线程中创build和销毁实例对于第三方成员来说是安全的。 class MyClass { static boost::mutex mx; // 3rd party library members public: MyClass(); ~MyClass(); }; MyClass::MyClass() { boost::mutex::scoped_lock scoped_lock(mx); // create and init 3rd party library stuff } MyClass::~MyClass() { boost::mutex::scoped_lock scoped_lock(mx); // destroy 3rd party library stuff } 我无法链接,因为我收到错误: undefined reference to `MyClass::mx` 我是否需要这种静态成员的特殊初始化? 使用静态互斥锁有什么错误吗? 编辑:链接问题是正确的定义在CPP boost::mutex MyClass::mx;

提升Asio单线程性能

我正在实现自定义服务器,需要保持非常大的数量(100K或更多)的长期连接。 服务器只是在套接字之间传递消息,并没有做任何严肃的数据处理。 消息很小,但是其中许多消息都是每秒收到/发送的。 减less延迟是目标之一。 我意识到使用多核并不会提高性能,因此我决定通过调用io_service对象的run_one或poll方法在单个线程中运行服务器。 无论如何,multithreading服务器将更难实施。 什么是可能的瓶颈? 系统调用,带宽,完成队列/事件解复用? 我怀疑调度处理程序可能需要locking(这是由asio库内部完成)。 是否有可能禁用boost.asio甚至队列locking(或任何其他locking)? 编辑:相关的问题。 multithreading的系统调用性能是否会提高? 我的感觉是,因为系统调用是由内核primefaces/同步添加更多的线程不会提高速度。

configuration错误:无法链接到boost_system

我试图在Debian上安装一个软件包(足球模拟器2d)。 当我到目录并运行./configure ,我得到以下内容: reza@debian:~/soccer/rcssserver-15.0.1$ ./configure checking for a BSD-compatible install… /usr/bin/install -c checking whether build environment is sane… yes checking for a thread-safe mkdir -p… /bin/mkdir -p checking for gawk… no checking for mawk… mawk checking whether make sets $(MAKE)… yes checking for g++… g++ checking whether the C++ compiler works… yes checking for C++ […]