我试图让其他项目更容易链接到我们与我们的项目一起分发的共享库。当我尝试利用 EXPORT 机制时,CMake 抱怨我没有在导出集中包含用于构建共享库的静态库。这对我来说似乎没有必要,因为其他项目只需要链接共享库,而我真的不想安装静态库。这似乎与这个 bug非常相似,但我可能只是误解了这一切是如何工作的。这是一个最小的例子:
CMAKE_MINIMUM_REQUIRED(VERSION 3.2.1)
PROJECT(ExportTest)
ADD_LIBRARY(myStaticLib STATIC staticLib.c)
ADD_LIBRARY(mySharedLib SHARED sharedLib.c)
TARGET_LINK_LIBRARIES(mySharedLib myStaticLib)
INSTALL(TARGETS mySharedLib EXPORT myExport DESTINATION lib)
INSTALL(EXPORT myExport DESTINATION include)
Run Code Online (Sandbox Code Playgroud)
这会导致以下错误消息:
CMake Error: install(EXPORT "myExport" ...) includes target "mySharedLib"
which requires target "myStaticLib" that is not in the export set.
Run Code Online (Sandbox Code Playgroud) 我认为应该是一个非常简单的测试用例,但每次运行它都会导致QTAgent32死机.在调试模式下运行测试用例显示System.StackOverflowException在"未知模块"中抛出.我已经将它缩小到展示这种行为的最基本的实现(.NET 4和VS 2010 Ultimate):
[TestClass]
public class StackOverflow
{
[TestMethod]
public void CreateStackOverflow()
{
var mockMyType1 = new Mock<MyType>();
mockMyType1.Setup(m => m.Equals(mockMyType1.Object)).Returns(true);
var mockMyType2 = new Mock<MyType>();
// Real test is for a filtering routine and the Assert is using
// Contains(), but it uses Equals() internally so it has the same problem
Assert.IsTrue(mockMyType1.Object.Equals(mockMyType1.Object)); // returns true
Assert.IsFalse(mockMyType1.Object.Equals(mockMyType2.Object)); // explodes
}
}
public class MyType
{
public virtual bool IsActive { get; set; }
public override bool Equals(object …Run Code Online (Sandbox Code Playgroud)