我试图从这里找到的CGP-Library生成一个.so / .dll: http://www.cgplibrary.co.uk/files2/Download-txt.html
我没兴趣从这个库生成一个包,只是为了生成一个可以在R中使用的.so / .dll来提供一些额外的功能。
我设法通过以下方式使用SWIG-3.0.5创建R包装器和.R文件:
swig -r cgp.i
在此处从CGP-Library github存储库中检索.i文件: https://github.com/AndrewJamesTurner/CGP-Library
我设法安装了RTools:
> find_rtools(T)
Scanning path...
ls : C:\Rtools\bin\ls.exe
gcc: C:\Rtools\GCC-46~1.3\bin\gcc.exe
VERSION.txt
Rtools version 3.1.0.1942
Version: 3.1
[1] TRUE
并设置PATH以包含适当的目录:
C:\Rtools\bin;C:\Rtools\gcc-4.6.3\bin;C:\R\R-3.0.2\bin\i386;%SystemRoot%\system32;
%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;C:\Program Files\ATI Technologies\ATI.ACE\Core-Static;
C:\Program Files\QuickTime\QTSystem\;%SDS_ALGO_PATH%;C:\Program Files\MySQL\MySQL Utilities 1.4.3\;
C:\Program Files\MySQL\MySQL Utilities 1.4.3\Doctrine extensions for PHP\;
C:\Program Files\CodeBlocks\MinGW\bin; C:\swigwin-3.0.5\;
当我跑步时:
R CMD SHLIB cgp_wrap.c
命令运行但只给我cgp_wrap.o文件,没有cgp_wrap.so/cgp_wrap.dll。
我得到一串我猜的异常(看起来像这样):
cgp_wrap.o:cgp_wrap.c:(.text+0x561b): undefined reference to `_imp__repeatCGP'
cgp_wrap.o:cgp_wrap.c:(.text+0x58a9): undefined reference to `_imp__runCGP'
cgp_wrap.o:cgp_wrap.c:(.text+0x5b19): undefined reference to `_imp__copyChromoso
me'
计数太多,看起来好像cgp_wrap.c中的每个函数都可能返回一个未定义的引用。
我对此非常陌生(创建库并尝试与R接口),我花了将近一周的时间来实现这一目标。但现在我迷路了。我不知道从哪里开始。
CGP-Library已经存在了几年了,我找不到任何暗示它被破坏的东西,这使我得出一个明显的结论,即这是一个PEBCAK问题。
如果有人能够在他们心中找到对我的同情并伸出援助之手,那将是非常棒的(并让你真棒!)
哦,是的,我正在运行32位Windows 7和R-3.0.2(Rstudio为0.98.1091)。
干杯
编辑:我也试过运行它,假设它是一个c ++库(而不是c)使用SWIGWIN中的后续内容:
swig -c++ -r -o example_wrap.cpp example.i
除了在cmd中提供略有不同(但基本相同)的消息之外,这没什么区别。
答案 0 :(得分:0)
嗯,这绝对是PEBCAK。一个非常非常的人。事实证明,在对这些东西不熟悉之前,我还有很长的路要走,但文档有时远未完成。
对于那些希望从现有的C源代码编译R兼容dll的人和现有的dll尝试一下(对于那些在他们读这个的时候滚动眼睛的人感到遗憾哈哈)
swig -r example.i
- 这会生成你的wrap_example.c和example.R文件
gcc -shared example_wrap.c example.c -I"full\path\to\R\include" -L"full\path\to\R.dll" -lR -lexample -o example.dll
- 这将从SWIG R包装的C库中生成一个新的dll。
需要注意的事项是确保您的包含文件和原始C源代码文件具有相同的名称并位于SWIG目录中。您可以指定现有dll的完整路径,也可以将其放在SWIG目录中。
非常感谢Ian Bell为此照顾我。 你可以在这里找到他的GitHub仓库(https://github.com/ibell),它有几个SWIG / minGW的工作示例,并通过SWIG / minGW从Linux到Windows交叉编译(全部用于R)