有没有人知道是否有任何C编译器可以阻止特定库和函数的使用?
例如,让我们说我想阻止访问float.h并尝试编译一个具有" #include"的程序。我希望编译失败,并且某种消息表明它是因为不能包含float.h。
或者,如果我想在math.h中阻止对sqrt()和pow()的访问,但是包含该库中的所有其他函数,那么一个具有" double hold = pow的行的程序( 2.0,3.0);"不会编译并且会被称为阻塞函数被调用。
我已尝试在线搜索此类内容,但我不认为我知道要搜索的正确字词,因为我似乎无法找到与我所做的相关的任何结果。我实际上正在寻找。
答案 0 :(得分:4)
例如,使用gcc,您可以执行以下操作来阻止某些包含:
<强> float.h时:强>
#error "You must not include me"
确保这些存根将覆盖您的系统库:
$ export CPATH=$PWD
编译试图在此环境中包含"float.h"
或<float.h>
的c文件将失败。
当然,这是可以避免的。您只需要手动声明在缺少的标题中声明的函数。
更好的选择可能是创建一个全局包含(-include
)
#pragma GCC poison
所有不应在程序中的任何位置使用的符号。
您还可以使用nm
检查包含您不希望由c librard解析的未解析符号的crated对象文件,并在找到此类符号时停止构建。