我写了一个相当庞大的C++ 11库,我打算允许从我的网站下载预编译版本.
所以我建立了一个自动构建,用clang编译库并使其可供下载,但这暴露了一个问题:如果我尝试使用GCC的clang编译库我得到未定义的引用(主要与之相关std::string) .我认为这与GCC 5.1中的GCC双ABI变化有关,但我不确定如何解决它.
我的问题是,我应该设置什么标志,或者我应该遵循哪些做法使C++库与clang和GCC兼容?
或者我应该放弃并编译两个独立的库?
正如已经在几个地方(例如这里)提到的那样,libc++ 与 libstdc++ 并不完全二进制兼容。有多种选择,但其中一些不太直接。
-stdlib=libstdc++标志与 libstdc++ 一起使用 clang 以与 libstdc++兼容(如其他答案中所建议)。不过,此解决方案在某些平台上可能更难设置。我建议如评论中已经提到的那样使用选项 1。