在CPP程序中使用Zeroin.c
Using zeroin.c in a cpp program
我正在编写一个小的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 代码 - 编译器,然后将结果对象文件链接在一起。
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- Linux的Cpp上的计时器
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- 命名空间中具有.h和.cpp文件的类
- 内置函数可查看CPP中的成员变量
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- Cpp-Tuple使用带有变量的get
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- 有充分的理由在h文件中使用include保护而不是cpp文件吗
- 如何通过cpp程序运行shell脚本
- 使用2个键的cpp-stl::优先级队列排序不正确
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- 如何在cpp文件之间切换窗口?在Qt中
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别
- 我需要知道编译器如何在cpp中使用析构函数
- 如何在cpp.中使用协议缓冲区存储大缓冲区/数组(char/int)
- 无法在UE4中包含BP类到CPP类
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- 在CPP程序中使用Zeroin.c