我的项目目前正在
gcc下编译.它使用Boost,ZeroMQ作为静态.a库和一些.so库,如SDL.我想一路铿锵但不是现在.我想知道是否有可能编译使用.c和.so库的代码在gcc下使用clang编译?
解决方法
是的,你通常可以使用与GCC编译库的clang(反之亦然,使用gcc与CLANG编译库),因为实际上它不是编译而是
linking是相关的.你可能不走运,并且会感到不愉快.
原则上你可以对用于链接相关库的libstdc版本有一些依赖(如果它们用C编码).实际上,这通常无关紧要.
在C中,name mangling理论上可能是一个问题(可能存在一些极端情况,即使两个不同版本的g之间存在不兼容性).同样,在实践中,它通常不是问题.
因此,通常你可以将CLANG(甚至不同但非常接近的版本)与GCC混合,但你可能会有令人不快的意外.任何C编译器(无论是CLANG还是GCC)应该期望能够使用相同的编译器和版本编译和链接整个软件(和所有库).这就是为什么升级分发中的编译器需要做很多工作的原因:分发制造商必须确保所有包都能很好地编译(并且它们确实会出现意外!).