我想在DLL中实现一个简单的类,如:
class MY_EXPORT_IMPORT MyClass
{
public:
//std::string anyPublicStr; //see point 3
protected:
std::string anyStr;
};
问题是Visual C ++编译器(在本例中为2013)会抛出以下警告:
C:... MyClass.hpp:X:警告:C4251:' MyClass :: postfix' :上课 '的std :: basic_string的,性病::分配器>' 需要有dll-interface才能被struct' MyClass'
的客户使用
我阅读了几个论坛,了解为什么会显示此警告以及如何解决此问题。但我现在还不清楚:
我个人不明白为什么这个类不能只是静态地链接所需的STL库,并使它在不导出任何东西的情况下工作。或者如果STL是动态链接的,它也应该在dll中自动链接。
为什么这是警告?怎么解决?
答案 0 :(得分:2)
std :: string只是一个typedef:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:weightSum="2" >
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical" >
<ImageView
android:layout_width="match_parent"
android:layout_height="100dp"
android:scaleType="centerCrop"
android:src="@drawable/arches_utah" />
<ImageView
android:layout_width="match_parent"
android:layout_height="100dp"
android:scaleType="centerCrop"
android:src="@drawable/blue_sea_mountains" />
<ImageView
android:layout_width="match_parent"
android:layout_height="100dp"
android:scaleType="centerCrop"
android:src="@drawable/china_jungle" />
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical" >
</LinearLayout>
</LinearLayout>
关于在dll接口边界上使用STL,通常情况下,如果你避免使用它会更简单,我个人更喜欢如果可能的话。但编译器只是给你一个警告,并不意味着你会以问题结束。看看:DLLs and STLs and static data (oh my!)