优化大于-O1时的链接器错误(clang ++)

时间:2017-03-24 18:29:55

标签: c++ clang clang++

我在XCode中有一个中等大小的C ++ / ObjC ++项目,它在-O0(在Debug配置中)编译/链接/运行,以及-O1,但是在-O1以上的任何地方我得到两个非常奇怪的链接器错误:

"std::__1::vector<BufferBinding, std::__1::allocator<BufferBinding> >::~vector()", referenced from: ... LevelSystem.o

"std::__1::vector<TextureHandle, std::__1::allocator<TextureHandle> >::~vector()", referenced from: ... LevelSystem.o

奇怪的是,vector<BufferBinding>vector<TextureHandle>在不同目标文件的许多地方使用,但我只是为我的LevelSystem.cpp&#39;而发现链接器错误。 FWIW,LevelSystem.o通过单独编译的静态库包含......

不幸的是我无法想出一个小的代码片段来重现这个问题,所以我希望找到一个具体的解决方案,我只是希望有任何建议可以寻找可能的地方或者进一步调试。

使用。编译 clang ++ -x objective-c ++ -arch arm64 -std = c ++ 1y -stdlib = libc ++ -fobjc-arc -O2(...)

我知道这很少继续下去,但我只是张贴在这里,以防过去有人经历过这种事情并且可以指出我正确的方向。

谢谢!

编辑:

TextureHandle是一个pimpl-y类,所以实际上只包含一个指向前向声明结构的指针。

BufferBinding只包含一个id<MTLBuffer>(和几个整数),这是ARCed,这是可疑的,但是然后TextureHandle再次出现同样的问题而没有任何ObjC指针......

0 个答案:

没有答案