【发布时间】:2011-01-02 04:16:45
【问题描述】:
我用 C++ 编写了一个类库,并在 Linux 中以 g++ 作为共享对象成功地编译了它,然后创建了一些使用它的应用程序。现在我必须将它移植到 VS2008。我为所有类提供了所需的 __declspec(dllexport) 前缀,然后尝试编译它。我收到一堆警告,基本上与:
- 我的自定义异常类,派生自 std::runtime_error,产生: “警告 C4275:非 dll 接口类 'std::runtime_error' 用作 dll 接口类 'cci::FileOperationException' 的基础”。我应该如何使标准库类 dll 可导出?
- 成员函数声明中的异常规范,这会导致“警告 C4290:C++ 异常规范被忽略,除非表明函数不是 __declspec(nothrow)”。我在某处读到 VS 不支持这些,而它在其他地方支持。多么令人困惑。
我读到有人说,在 DLL 中导出类通常是个坏主意,有很多事情可能出错,现在我脑子里充满了诸如二进制不兼容、dll 地狱、编译器版本不匹配等概念,老实说,我无法真正做出正面或反面。那么在 Windows 中创建共享类库的正确、安全和简单的方法是什么?
谢谢。
【问题讨论】:
-
真的需要DLL吗?制作静态库可以避免很多问题。
-
好点。 :) 不过,最初的问题仍然存在——人们能够以某种方式使用 DLL,不是吗? (另外,有什么简单的方法可以将构建从共享更改为静态?Project->Properties->General->Configuration Type->Static Library 就足够了吗?)
-
他们正在使用它们,但并非没有很多箍跳。恕我直言,静态库应该始终是首选。
-
你用的是什么版本的visual studio?
-
正如我没有提到的 - 它是 VS2008 Professional。为什么? ;)
标签: c++ visual-studio dll export