我可以用 C 编译选定的 header 代码吗

标签 c gcc compilation

我有一个使用 ocilib 和 mysql header 的 C 代码。 在我的某些机器上,我没有 ocilib 或 mysql,并且我希望能够选择使用/不使用 header 来编译我的代码,我可以这样做吗? 需要说明的是,代码中定义了 ocilib 和 mysql,所以我可能想在编译时将它们也删除。

示例:

#include <regex.h>
#include <time.h>
#include <ocilib.h>


void main(){
MYSQL *conn;
OCI_Connection* cn;
OCI_Statement* st;
char *db_type=NULL;
.....
....
if (strcasestr(db_type,"mysql")){/* mysql */
if (!mysql_real_connect(conn, db_host,db_user, db_password, db_schemata, 0, NULL, 0)) {
        syslog (LOG_NOTICE,"%s\n", mysql_error(conn));
        return;
    }
....
}else{/* oracle*/
OCI_Initialize(NULL, NULL, OCI_ENV_DEFAULT);
....
}
}

我希望我说得足够清楚.. 谢谢!

最佳答案

您可以在代码中插入条件编译指令(#ifdef ... #endif 是规范的),以有选择地启用或禁用相关 # 的编译include 指令。然而,正如 @MichaelWalz 在评论中观察到的那样,仅抑制 header 可能会破坏代码的其余部分 - 如果没有,那么您应该删除那些 #include

此外,如果您在特定环境中没有 header ,那么您似乎也没有包含这些 header 声明的函数的库。假设您包含 header ,因为您的代码依赖于其中一些函数,那么一旦编译了程序,无论有 header 还是没有 header ,您都将无法链接该程序。

因此,只有当您在代码中需要的任何地方使用条件编译解决方案来消除对给定库功能(包括相关 header )的所有依赖时,条件编译解决方案才有效。这种方法相对常见,但要改造到最初不是为此设计的系统并不容易。

关于我可以用 C 编译选定的 header 代码吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36179970/

相关文章:

c - 逐个元素读取有效,但读取 block 则无效

gcc - gcc 输出的 .seh_* 汇编命令是什么?

java - 让 JFlex 和 Cup 协同工作

c++ - 面向对象对嵌入式系统不利,为什么?

关于 C : escape sequence, float 中 2 个名称的混淆

c - 错误 : conflicting types for built-in function ‘tolower’ [-Werror]

go - Thrift Compiler(0.9.3) 生成 Thrift 包中未定义的函数 thrift.PrependError

java - 将 .class 文件转换为 .cap JavaCard 3.0.2 Connected Edition

python - 嵌入式CPython,使用命名管道进行线程交互

apache - 在 Solaris 11.3 中编译 httpd-2.4.20 make 失败