我在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指针......