- 主题:[讨论]动态库对外提供的类或接口能否使用STL
leveldb中,类WriteBatch是对外提供使用的,代码在下面:
class LEVELDB_EXPORT WriteBatch {
public:
...
private:
std::string rep_;
};
这样是否存在兼容性问题呢?? 大神肯定会考虑这些问题的啊。求解
--
FROM 114.255.110.*
编译器版本和cpu平台不变的话可以。
【 在 lc900 (lc900) 的大作中提到: 】
: leveldb中,类WriteBatch是对外提供使用的,代码在下面:
: class LEVELDB_EXPORT WriteBatch {
: public:
: ...................
--
FROM 114.87.105.*
你这是string啊,通常不算stl
【 在 lc900 的大作中提到: 】
:
: leveldb中,类WriteBatch是对外提供使用的,代码在下面:
:
: class LEVELDB_EXPORT WriteBatch {
: public:
#发自zSMTH@钛星
--
FROM 222.129.48.*
string也危险,也可能layout不一致
【 在 ble (ble) 的大作中提到: 】
: 你这是string啊,通常不算stl
: #发自zSMTH@钛星
--
FROM 218.200.160.*
我感觉这个问题只有windows平台很严重, 我在mac和ios上动态库,接口随便用c++ std命名空间的东西, 从来没出过问题, 个人经验
【 在 lc900 (lc900) 的大作中提到: 】
: leveldb中,类WriteBatch是对外提供使用的,代码在下面:
: class LEVELDB_EXPORT WriteBatch {
: public:
: ...................
--
FROM 218.200.160.*
C++对象的内存布局有些是有明确规定的,
但在某些情况下是由编译器的实现者决定的(比如有虚函数时),也就是没有明确的规范,换编译器了可能就不一样了。
不同编译器的默认对齐粒度可能也不一样。
如果你的项目的调用者、被调用者是固定死了编译器的,问题不大。
MS有一个简单的说明:
https://docs.microsoft.com/en-us/cpp/cpp/trivial-standard-layout-and-pod-types?view=msvc-160
--
修改:z16166 FROM 123.115.128.*
FROM 123.115.128.*
所以保险的做法就是用目标编译器重新编译库?
反正我司的项目就是这样搞得,需要在solaris,linux,win用。
【 在 z16166 的大作中提到: 】
: C++对象的内存布局有些是有明确规定的,
: 但在某些情况下是由编译器的实现者决定的(比如有虚函数时),也就是没有明确的规范,换编译器了可能就不一样了。
:
: ...................
--来自微水木3.5.11
--
FROM 140.206.195.*
标准库abi各有说明,msvc的abi好像从2015到2019都没变了。
【 在 foliver 的大作中提到: 】
: 所以保险的做法就是用目标编译器重新编译库?
: 反正我司的项目就是这样搞得,需要在solaris,linux,win用。
:
: ...................
--
FROM 124.64.18.*
厉害啊,连这个细节都知道
MS也有说明
https://docs.microsoft.com/en-us/cpp/porting/binary-compat-2015-2017
【 在 milksea 的大作中提到: 】
: 标准库abi各有说明,msvc的abi好像从2015到2019都没变了。
--
FROM 123.115.128.*
leveldb开源的,编一把也就几分钟的事吧
--
FROM 119.103.227.*