zoukankan      html  css  js  c++  java
  • gcc编译链接std::__cxx11::string和std::string的问题

    今天公司的小伙伴遇到一个问题,这里做一个记录。
    问题是这样的,他编译了公司的基础库,然后在程序中链接的时候遇到点问题,报错找不到定义。

    用到的函数声明大概是这样的:

    void function(const std::string& in,int* out);
    

    编译的时候显示找不到定义,报错大概是这样的:

    ‘function(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&,int*)’未定义的引用
    

    我直接写了一个一样的function函数的代码,然后使用strings对比了下基础库中的和直接使用代码编译出来的函数签名,发现两者不一样。
    然后看了一下他的基础库的编译,原来他基础库编译的时候使用的是gcc 5.3,但是他使用的gcc版本是7.4,而7.4已经默认使用C++11了,而在C++11下,std::string使用的是std::__cxx11下的,两者ABI不一样。

    解决办法
    要解决这个问题,只需要在编译的时候添加_GLIBCXX_USE_CXX11_ABI=0宏定义即可。

    或者程序都使用相同版本编译器编译也行。

  • 相关阅读:
    PyCharm的常用方法
    python的基本语法
    Python 环境搭建----windows
    Python 特点
    DML语句
    DDL语句
    程序员的职业素养 读书笔记
    程序员的职业素养 读书笔记
    程序员的职业素养 读书笔记
    程序员的职业素养 读书笔记
  • 原文地址:https://www.cnblogs.com/oloroso/p/11307804.html
Copyright © 2011-2022 走看看