Gcc 如何在与C+混合使用时使用POSIX版本的strerror_r获取C文件+;文件夹

Gcc 如何在与C+混合使用时使用POSIX版本的strerror_r获取C文件+;文件夹,gcc,g++,posix,gnu,Gcc,G++,Posix,Gnu,这个问题涉及到。但是,StruRoRyr在C文件中,但是其他文件是C++文件。 为了确保所有文件顺利编译和链接,我选择使用相同的g++编译器和编译标志。这打破了strerror\r的默认版本 是否需要使用相同的编译器和标志?如果我使用GCC编译C文件,但是G++编译C++文件,它们会正确链接不破坏LIbSTDC++吗?p> 由于C文件和C++文件都来自现有项目,所以不太喜欢滚动自己的StruRoRyr版本。p> 编辑:刚刚将代码和问题发布到github。我没有看到这个问题的一个简洁的解决方案,因

这个问题涉及到。但是,StruRoRyr在C文件中,但是其他文件是C++文件。 为了确保所有文件顺利编译和链接,我选择使用相同的g++编译器和编译标志。这打破了strerror\r的默认版本

是否需要使用相同的编译器和标志?如果我使用GCC编译C文件,但是G++编译C++文件,它们会正确链接不破坏LIbSTDC++吗?p> <>由于C文件和C++文件都来自现有项目,所以不太喜欢滚动自己的StruRoRyr版本。p>
编辑:刚刚将代码和问题发布到github。我没有看到这个问题的一个简洁的解决方案,因为我读到的参考SO问题要么是滚动你自己的,要么是冒险破坏libstdc++(我不知道会破坏什么)。我可以创建一个特定的案例并显示中断的代码吗?现在还没有。如果有人能告诉我libstdc++的哪个部分可以被undef_GNU___源代码破坏,那可能也会给我一些提示。我确实看到了一些奇怪的行为,但并没有缩小到一个最小的和可验证的部分。它在一个嵌入式系统上,几乎没有调试能力。如果我写了一些可靠的东西,我肯定会把它贴在这里

经过一些研究和思考,我相信答案如下,尽管有些人可能在某种程度上不同意

  • 是否需要使用相同的编译器和标志?虽然首选,但这不是必需的。只要编译器和标志是兼容的,每个C或C++文件可以不同的编译,并且它们也应该正确地链接。<李> <> LI>如果使用GCC编译C文件,但G++编译C++文件,它们会正确链接而不破坏LIbSTDC++,因为所引用的问题表示或暗示它可能会崩溃?我猜这里的规则是:[1 ] C++代码只调用C++库。和[2 ] C代码只调用C库,不调用C++代码或C++库。李>
如果您遇到错误,请发布一条消息。