是否有任何 C 编译器可以让您阻止特定库和函数的使用?
Are there any C compilers which let you block the usage of specific libraries and functions?
有谁知道是否有任何 C 编译器可以阻止使用特定的库和函数?
例如,假设我想阻止对 float.h 的访问并试图编译一个包含“#include”的程序。我希望编译失败并显示某种消息表明这是因为无法包含 float.h。
或者,如果我想在 math.h 中阻止对 sqrt() 和 pow() 的访问,但包含该库中的所有其他函数,那么一个包含 "double hold = pow(2.0, 3.0);" 行的程序不会编译并且会磨损正在调用的阻塞函数。
我试过在线搜索类似的内容,但我不认为我知道要搜索的正确术语,因为我似乎找不到与我实际寻找的内容相关的任何结果。
例如,对于 gcc,您可以执行以下操作来防止某些包含:
- 为您希望失败的每个 header 创建一个失败存根:
float.h:
#error "You must not include me"
确保这些存根将覆盖您的系统库:
$ export CPATH=$PWD
编译试图在此环境中包含 "float.h"
或 <float.h>
的 c-file 将失败。
当然,这是可以规避的。您只需要手动声明在缺失的 header 中声明的函数。
更好的选择可能是创建一个全局包含 (-include
),您可以在其中
#pragma GCC poison
所有不应在程序中的任何地方使用的符号。
您还可以使用 nm
检查装箱的 object 文件,寻找您不希望 c librard 解析的未解析符号,如果找到此类符号,则停止构建。
有谁知道是否有任何 C 编译器可以阻止使用特定的库和函数?
例如,假设我想阻止对 float.h 的访问并试图编译一个包含“#include”的程序。我希望编译失败并显示某种消息表明这是因为无法包含 float.h。
或者,如果我想在 math.h 中阻止对 sqrt() 和 pow() 的访问,但包含该库中的所有其他函数,那么一个包含 "double hold = pow(2.0, 3.0);" 行的程序不会编译并且会磨损正在调用的阻塞函数。
我试过在线搜索类似的内容,但我不认为我知道要搜索的正确术语,因为我似乎找不到与我实际寻找的内容相关的任何结果。
例如,对于 gcc,您可以执行以下操作来防止某些包含:
- 为您希望失败的每个 header 创建一个失败存根:
float.h:
#error "You must not include me"
确保这些存根将覆盖您的系统库:
$ export CPATH=$PWD
编译试图在此环境中包含 "float.h"
或 <float.h>
的 c-file 将失败。
当然,这是可以规避的。您只需要手动声明在缺失的 header 中声明的函数。
更好的选择可能是创建一个全局包含 (-include
),您可以在其中
#pragma GCC poison
所有不应在程序中的任何地方使用的符号。
您还可以使用 nm
检查装箱的 object 文件,寻找您不希望 c librard 解析的未解析符号,如果找到此类符号,则停止构建。