相关疑难解决方法(0)

_GLIBCXX_USE_CXX11_ABI,GCC 4.8和ABI兼容性

我们收到了一些为linux编译的库(.a)(可能是用GCC 6.x编译的).

我们正在使用GCC 4.8,我们得到了类型的错误: undefined reference to std::__cxx11::basic_string尝试链接时.

通常,这可以通过确保所有单元都使用相同的_GLIBCXX_USE_CXX11_ABI标志进行编译来修复.但是,如果我理解正确,这是由GCC 5.1引入的.

  1. 有没有办法使这个工作与GCC 4.8或我们是否需要让人们用不同的方法重新编译库_GLIBCXX_USE_CXX11_ABI
  2. 我想如果我们能够切换到GCC> = 5.1,我们可以做到这一点吗?

谢谢!

c++ linux gcc c++11

14
推荐指数
1
解决办法
8918
查看次数

在C++库接口中安全地使用容器

在设计C++库时,我认为std::vector在公共接口中包含标准库容器是不好的做法(参见例如在dll导出函数中使用std :: vector的含义).

如果我想公开一个获取或返回对象列表的函数,该怎么办?我可以使用一个简单的数组,但后来我必须添加一个count参数,这使得界面更麻烦,更不安全.map例如,如果我想使用a ,它也无济于事.我想像Qt这样的库定义了自己的容器,这些容器可以安全地导出,但是我宁愿不把Qt作为依赖项添加,而且我不想滚动自己的容器.

在库接口中处理容器的最佳做法是什么?是否可能有一个小容器实现(最好只有一两个文件,我可以使用许可许可证),我可以用作"粘合剂"?或者甚至有一种方法可以使std::vector.DLL/.so边界和不同的编译器安全等等?

c++ containers api-design

12
推荐指数
1
解决办法
1583
查看次数

标签 统计

c++ ×2

api-design ×1

c++11 ×1

containers ×1

gcc ×1

linux ×1