【发布时间】:2015-04-14 08:24:33
【问题描述】:
我需要在运行时编译和链接一些代码。我正在使用这里建议的方法:https://stackoverflow.com/a/10565120/3038460
基本上我将代码写入 .cpp 文件,然后使用
进行编译/usr/bin/g++ -shared mysource.cpp -o libname.so
一切正常,而我只使用标准库中的 #include 标头。但是如果我需要在“动态”代码中使用自定义类怎么办?如何包含我自己的标题? .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
}
解决此问题的最佳解决方案是什么?
【问题讨论】:
-
您不提供其余源代码的目标与 C/C++ 开发并不真正兼容。您通常需要包含标头,因为您需要访问定义您想要使用的接口的数据类型定义和/或函数原型。如果这些标头不可用,则编译器不知道如何编译您提供的代码 sn-p。当只有二进制文件可用时,C/C++ 不能进行增量编译。
-
好的...所以我想唯一的方法是直接在
mysource.cpp内打印标题的内容,从硬编码字符串中获取它或使用脚本复制源文件作为建议@Z̷͙̗̻͖̣̹͉̫̬̪̖̤͆ͤ̓ͫͭ̀̐͜͞ͅͅαлγo
标签: c++ c header-files dlopen runtime-compilation