2010-11-10 56 views
1

我需要在我的项目中包含一个.h文件,该文件将在运行时提供。由于.h文件在链接时链接,我无法包含.h文件。所以我决定写一个可以创建.h文件的虚拟程序,然后我会打电话给我的实际程序。无论如何要这样做。或者任何其他解决方案是可能的我基本上需要在我的程序开始执行之前创建一个.h文件,并且需要将它连接到我的程序。 我实际上应该创建一个由用户创建的文件,解析该文件,然后创建一个结构,并在该文件中包含字段。例如,如果该文件包含以下数据: - fno:int:4,fname:char :30,ftype:int:4 然后我应该创建一个结构像 struct somename { int fno; char fname[30]; int ftype }; 然后,我应该能够创建结构的实例创建。这是我喜欢做的从gcc中的另一个程序执行C程序

+0

正如史蒂夫说的 - 不要这样做。 :-) – 2010-11-10 14:23:51

回答

2

你可以做的是:

  • 创建.h文件中
    • 如果孩子:execve的
    • 如果父亲:等待(或不是,取决于你想要做什么)
0

我会用Makefile;你的程序会在运行时收到头文件(也许检查它?),然后execve()命令传递文件的名字make

但是,这听起来非常麻烦;也许你正试图用错误的工具来实现某些东西。也许你想先使用一些脚本?或者写两个单独的程序..?你想做什么?

+0

我实际上应该创建一个由用户创建的文件,解析该文件,然后使用该文件中存在的字段创建一个结构。例如,如果该文件包含以下数据: - fno:int:4,fname :char:30,ftype:int:4然后我应该创建一个struct somename {int fno; char fname [30],int ftype};然后,我应该可以创建创建的结构的实例。这就是我喜欢做的事情 – nikhil 2010-11-10 19:52:46

+0

@nikhil:如果你关心性能,考虑使用python并从它内部执行C代码。你的方法非常困难,因为你基本上正在尝试编写一个解析器来检查语法并分配内存......祝你好运,避免出现错误。 – lorenzog 2010-11-10 21:53:13

3

dlopen是一个解决方案。它允许在运行时加载动态库。

  • 将您的虚拟程序编译为动态库。
  • 在您的.so上使用dlopen
  • 调用您需要的任何函数,就好像它已经通过gcc链接(请参阅dlsym)。
+4

+1还有:不要这样做。解决真正的问题,而不是你为自己创造的这个疯狂的问题,试图解决真正的问题;-) – 2010-11-10 14:13:09

+0

我同意史蒂夫。 'dlopen'基本上是用于插件的(如果这就是你正在做的事情,我仍然不明白) – log0 2010-11-10 16:30:18