在CPP程序中使用Zeroin.c

Using zeroin.c in a cpp program

本文关键字:Zeroin CPP 程序      更新时间:2023-10-16

我正在编写一个小的CPP程序,我想在R(Unirot函数)中包括一个通常使用的函数。该R函数实际上是用C中编写的名为Zeroin的功能的包装器,我想在CPP文件中使用它。麻烦是我以前没有做过这样的事情,所以我不确定如何做到这一点,甚至从哪里开始。Zeroin的文件夹在这里:Zeroin。我想我需要以某种方式包含Zeroin.c文件。我在这里读到,要使用这样的功能,我需要

使用以下符号之一声明该对象或 功能具有语言语的链接:

extern
"language_name" declaration ; 
extern "language_name" { declaration ;
declaration ; ... }

第一个符号表示声明(或定义) 紧随其后的是Language_name的链接。第二 符号表明卷曲支架之间的所有物质都有 language_name的链接,除非另有说明。请注意 在第二次结束后不要使用分号 符号。

,但我仍然不确定其中哪一个,如果我需要做或如何进行编译和链接文件以获取正确的输出。仅编译和链接CPP是可以的,但是我以前从未尝试过CPP和C。

使事情更加混淆包含Zeroin的可下载文件夹。

有人有任何建议我应该用CPP文件做什么?

仅提供有关我在CPP中要做的事情的更多信息,即计算二项式概率分布的C.D.F的根(我尚未到处找到CPP中的二项式区域的此类功能)。如果任何人都知道R和CPP-在R中,我会这样这样做:

binomcalc <- function(p, p0, N, B){pbinom(B,N,p)-p0}
soln <- uniroot(binomcalc, c(0,1), p0=0.95, B=10, N=20)

和soln将包含p0 = 0的p值。

现在,我可以使用RINSIDE或类似的东西将R嵌入我的CPP程序中,但它可能使我感到震惊。

谢谢本。

- 编辑 - 我尝试了以下教程/说明,然后复制cfile.c和main.cpp文件,并按照其指示执行以下操作:

yrq12edu@env-12bw:~/Desktop/example$ gcc -c -Wall -Werror -fPIC Cfile.c

好吧,这是c汇编的c文件。

yrq12edu@env-12bw:~/Desktop/example$ gcc -shared -o libCfile.so Cfile.o

现在,它被编译为共享库。我有文件:

yrq12edu@env-12bw:~/Desktop/example$ ls
Cfile.c  Cfile.o  libCfile.so  main.cpp

,但接下来如果我执行下一个指令:

$ g++ -L/home/himanshu/practice/ -Wall main.cpp -o main -lCfile

在我的机器上AS:

yrq12edu@env-12bw:~/Desktop/example$ g++ -L/local/yrq12edu/Desktop/example/ -Wall main.cpp -o main -lCfile

现在,只要.SO文件在我的ld_library_path中,这确实可以工作。我想知道有没有办法作为静态库这样做,还是必须是共享库?我将与Zeroin.c

一起去

- 编辑 -

尝试编译Zeroin.c导致错误:

yrq12edu@env-12bw:~/Desktop/example$ gcc -c -Wall -Werror -o zeroin.o zeroin.c
zeroin.c: In function 'zeroin':
zeroin.c:80:17: error: 'EPSILON' undeclared (first use in this function)
zeroin.c:80:17: note: each undeclared identifier is reported only once for each function it appears in
zeroin.c:118:7: error: suggest explicit braces to avoid ambiguous 'else' [-Werror=parentheses]
cc1: all warnings being treated as errors

我认为这是因为不包括Math.h,我认为这就像CPP中的许多普通标头,编译器可以找到它并包含它 - 也许我需要为C和将其放在同一目录中。

Zeroin中的包含行。C是#include "math.h"

假设您有一个c源文件zeroin.c和一个相应的标头文件zeroin.h,您将从c 源文件中包含zeroin.h,例如:

extern "C" {
#include "zeroin.h"
}

然后,您可以使用您的C-Compiler编译Zeroin.c,用C 编译C 代码 - 编译器,然后将结果对象文件链接在一起。