std::thread线程库详解(5) (2)

如果对于编译比较熟悉的话,应该是知道这是在链接时找不到符号导致的错误,一般是没有链接动态库导致的错误。而比较奇怪的是,提示的只有这一个函数,如果是没有链接相关的动态库,应该是有更多的提示,而不是仅仅只有这一条。然后想到更换了标准库,猜想应该是std::string在编译时符号不一致导致的。

经过验证的确如此。通过对以下文件分别使用不同的库进行编译。

#include <thread> #include <iostream> #include <string> #include <chrono> #include <vector> #include <boost/timer/timer.hpp> using namespace std::chrono_literals; boost::timer::auto_cpu_timer timer; int my_func(std::string data); int main() { my_func("test"); return 0; }

得到的报错分别是:

libc++

undefined reference to `my_func(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)'

而libstdc++

undefined reference to `my_func(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)'

可以看到差别,如果编译成汇编文件,还可以看到更加详细的差别。总之,不同的标准库无法简单的混编。也许Modules能解决这一问题吧。

博客原文:https://www.cnblogs.com/ink19/p/std_thread-5.html

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwywss.html