C/C++ の基本的な Ubuntu でブーストを使用するときに問題が発生し、「boost::system::generic_category()」への未定義の参照が発生する

cmake によって構築されたエンジニアリング プロジェクトの場合:

# CmakeList.txt添加如下内容
add_definitions(-DBOOST_ERROR_CODE_HEADER_ONLY)

# 或者
find_package(Boost 1.55.0 REQUIRED COMPONENTS system filesystem)
include_directories(untitled ${Boost_INCLUDE_DIRS})
link_directories(untitled ${Boost_LIBRARY_DIRS})
target_link_libraries(untitled ${Boost_LIBRARIES})

g++ コンパイラの場合は、ライブラリをリンクするためのコンパイル オプションを追加する必要があります。

発生した問題:
/usr/include/boost/system/error_code.hpp:221: `boost::system::generic_category()' への未定義の参照
/usr/include/boost/system/error_code.hpp:222: 未定義の参照`boost::system::generic_category()' へ
/usr/include/boost/system/error_code.hpp:223: `boost::system::system_category()' への未定義の参照

解決する:

g++ -o test main.cpp -lboost_system

質問:

「boost::detail::thread_data_base の vtable」への未定義の参照

「boost::thread::start_thread_noreason()」への未定義の参照

「boost::thread::detach()」への未定義の参照

解決する:

g++ -o main main.c -lboost_system -lboost_thread

要約: 単刀直入に言うと、不足しているライブラリがある場合は、指定されたライブラリを後でリンクするだけです。

例:

#include<boost/thread.hpp>
using  namespace  boost; //名字空间

#include<iostream>
using namespace std;

#pragma comment(lib, "libboost_thread-vc100-mt-gd-x32-1_67.lib")

void  ThreadFun(string  & threadName)
{
   for (size_t i = 0; i < 5; i++)
   {
   	printf("%s 执行!\n", threadName.c_str());

   	//线程睡眠
   	this_thread::sleep(posix_time::seconds(1));
   }
}

int main()
{ 
   //定义线程对象,线程执行函数,函数参数,构造
   thread  t1(ThreadFun, string("线程1"));//立即运行

   thread  t2(ThreadFun, string("线程2"));//立即运行

   //t1.join();//先阻塞,等待子线程执行完毕后返回
   //t2.join();//先阻塞,等待子线程执行完毕后返回

   //如果线程还没结束,最多等待3秒
   t1.timed_join(posix_time::seconds(8));

   cout << "main结束!" << endl;

   getchar();
   return 0;
}

 

引用

おすすめ

転載: blog.csdn.net/qq_34761779/article/details/129193574