如何在 c 文件中编写入口点,以便可以通过命令行和/或 WSTP/MathLink/Mathematica 访问该文件的其他函数?



我有一个52KB的c程序,其中有几个函数(例如,Function1、Function2、Function3等),我从"Main"入口点函数调用这些函数。但是每次我需要使用这些函数时重写/重新编译程序似乎是在浪费我的新手时间。理想情况下,我想在Mathematica中调用这些函数,但我花了一整天的时间试图弄清楚WSTP/MathLink,似乎我无法实现这一点;考虑到令人厌烦的addtwo例子的普遍性,如果不是超出大多数的话。

必须有一种简单的方法来重写这个Main函数,这样,如果Mathematica没有调用(例如,LibraryFunctionLoad、Install、MLGetInteger()等),Function1、Function2等就可以通过命令行接口轻松执行

int main (int argc, char *argv[])
{
    FUNCTION1(n1,n2,n3,etc.);
    FUNCTION2(n4,n5,n6,etc.);
    FUNCTION3(n7,n8,n9,etc.);   
 }

我知道如何更改源中的输入(即n1、n2、n3等),重新编译它,并获得输出。但是,我如何更改和/或包装上面的代码,以便可以通过命令行接口输入输入,或者更好地通过Mathematica输入?关于MathLink,似乎必须单独编译每个函数,也就是说,与通过主入口点函数访问所有函数相反,这是正确的吗?我在WWW上找到的关于c和命令行界面的一切都是幼稚的东西,比如让终端告诉你你在键盘上点击了多少次"回车"之类的东西。。。我知道我在这里问的是荒谬的基本问题,但如果我不是迫切需要答案的话,我不会冒失分的风险。

解析作为命令行参数的argc/argv,然后您应该能够根据需要进行转换。例如,如果您想转换命令行的第一个参数:

$ mycommand 10

对于int,您可以使用:

int main(int argc,char **argv) {
  int n1;
  sscanf(argv[1],"%d",&n1); // convert string to int
  FUNCTION1(n1,etc.);
}

最新更新