c++ - 在运行时编译和 C++ 中的#include 自定义 header

标签 c++ c header-files dlopen runtime-compilation

我需要在运行时编译和链接一些代码。我正在使用此处建议的方法:https://stackoverflow.com/a/10565120/3038460

基本上我是将我的代码写入一个 .cpp 文件,然后使用

进行编译
/usr/bin/g++ -shared mysource.cpp -o libname.so

一切正常,而我只使用标准库中的 #include header 。但是,如果我需要在“动态”代码中使用自定义类怎么办?如何包含我自己的标题? .cpp 文件临时存储在我的二进制文件的相同位置,这可能与我的源文件的位置不同。有没有办法在运行时知道原始源代码所在的位置?我怀疑。

此外,即使原始源代码不可用,我也希望我的代码能够正常工作。

澄清一下,mysource.cpp 可能如下所示:

#include <stdlib.h>
#include <vector>
#include "myheader.h"     <---- how can g++ find this file? At runtime,
                                when I create mysource.cpp, I have no idea
                                where myheader.h is located

void f(){
  // Code
}

解决这个问题的最佳方案是什么?

最佳答案

将该头文件的内容生成到生成的源文件中。

从技术上讲,#include 指令只是一个指令,用于在编译时将头文件的全部内容包含在源文件的主体中(具体来说,在您包含它的位置) .因此,您可以跳过中间人并在编译之前将该头文件的内容生成到您的源文件中,而不是 #include

关于c++ - 在运行时编译和 C++ 中的#include 自定义 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29616217/

相关文章:

c - 头文件难点

c++ - 在cpp中访问头变量

c++ - 子字符串和分隔符

c++ - 使用 Free Pascal 时,针对 Linux x64 下的 indigo cheminformatics 包的静态链接提示对 __dso_handle 的 undefined reference

c - 选择文件时子窗口的 Windows 消息循环中出现多余(错误)消息

c - 我如何在不包含 "unistd.h"的情况下使用 read() 和 write() ?

c++ - std::tuple 中的空类型

c++ - 将 char[ ][ ] 的地址复制到 C 字符串

c++ - PortAudio 示例代码问题

c - aarch64 中的结构对齐