我正在尝试构建一个使用一些C代码的R包.我有一个C库,它被编译成可执行文件,可以从命令行调用.有一个与之关联的Makefile.
我试图神交的信息在这里,它说:
如果要创建然后链接到库,比如使用子目录中的代码,请使用类似的内容
.PHONY: all mylibs
all: $(SHLIB)
$(SHLIB): mylibs
mylibs:
(cd subdir; make)
Run Code Online (Sandbox Code Playgroud)
小心创建所有必需的依赖项,因为无法保证所有依赖项都以特定顺序运行(并且某些CRAN构建机器使用多个CPU和并行产生).
如果我src在我的包中创建一个新的文件夹子目录,调用someLibrary代码和Makefile不变,反过来,在Makevars我的包的原始文件中我添加上面的代码不变,那么我将能够构建该共享库要出口使用useDynLib?
根据这里的信息,我Makefile通过添加更改了创建共享库
CFLAG = -fPIC -g -O3
LDFLAGS= -shared
Run Code Online (Sandbox Code Playgroud)
但是,这会导致.so文件不直接导出到libs包的目录.如果我将路径硬编码到目标中,那么文件将被发送到libs包的目录(这完全是通过调用的方式R CMD INSTALL myPackage).
最后,我想知道如何调用共享库,因为它有一个main()我可以从命令行可执行文件中调用的方法.
将此公开给R的程序是什么NAMESPACE,以便可以通过.Call?
PS.如果我将最后一点作为一个单独的问题,请告诉我.
我有4个文件:1.C,升·小时,2.C,2.H。我需要一个生成文件,它将从这 4 个文件创建一个动态库 (.so)。我试图写一个这样的makefile:
library.so : 1.c 1.h 2.c 2.h
但它没有用。如果有人帮助我,那就太好了,谢谢。