在C++中创建类库时,可以在动态(.dll,.so)和静态(.lib,.a)库之间进行选择.它们之间有什么区别,何时适合使用哪种?
如何将类对象(尤其是STL对象)传递给C++ DLL?
我的应用程序必须以DLL文件的形式与第三方插件交互,我无法控制这些插件构建的编译器.我知道STL对象没有保证ABI,我担心我的应用程序会导致不稳定.
我不知道在 Windows 和 Linux 上保证 C++ 库的二进制兼容性的确切方法。但是我认为如果我使用 C 链接制作所有公开的 API,我想我可以轻松地保证在 Windows 和 Linux 上的这种兼容性。
就像下面这样:
extern "C" int SomeAPI();
其余的函数肯定会用 C++ 编写。只有对外公开的 API 才会有 C 链接。
并且公开的 API 必须是纯 C 函数——没有例外,没有使用 C++ 类型。
我是对还是错?我有什么误解吗?
我想即使使用 C 程序我也可以使用这个库。
我想要实现的兼容性是编译器向前兼容性和标准库向前兼容性。
我不能让它开源。我只需要关闭它。--> 我会努力让它开源。
我使用 boost 和 STL 来制作共享或静态 C++ 库。此外,我想知道兼容性不仅适用于编译,还适用于在 OS 中启动和运行。
我对吗?
我们一直在将 Java 和 .NET API 库转换为 C++,并试图找出将编译版本分发给其他开发人员以与他们的自定义应用程序一起使用的最佳方法。应该是静态库还是动态库?
我们需要为 Win32 和 Win64 创建(我想每个目标操作系统都有调试版本和发布版本)。考虑到我在尝试确保所有引用的库都匹配(/MT 与 /MD)时遇到的所有挫败感,我想知道是否需要在这里做出一个决定来简化其他开发人员的工作。
当我dumpbin /all <static library file name> | find /i "msvc在静态库上运行时,我看不到任何运行时引用(与在 .exe 或 .dll 上执行相同操作时不同)。这是否表明运行时尚未链接,并且这使开发人员在开发和构建自己的应用程序时可以更灵活地创建 /MT 或 /MD?
哪种方法可以让开发人员的生活更轻松?