我正在编写一个R扩展,其中包含依赖于第三方DLL的C代码。使用带有R 2.11.0的Rtools在Windows上进行编译。我的计划是DLL将与源包一起分发并存储在扩展的src目录中。那么我的问题是当我尝试链接到第三方DLL时,我怎么能让编译器查看src目录。
目前,我正在使用以下命令构建程序包:
R CMD build --binary MyPackage
我还有一个文件src / Makevars,其中包含以下行:
PKG_LIBS = -ldlxapi32
这可确保第三方DLL dlxapi32.dll包含在编译中。但是,编译器找不到DLL,因为我的包的src目录不是标准库搜索路径的一部分。
我试图通过将src / Makevars更改为:
来解决此问题PKG_LIBS = -L$(CURDIR) -ldlxapi32
但是输出失败了,输出如下:
gcc -shared -s -static-libgcc -o MyPackage.dll tmp.def dlx.o -L/cygdrive/c/DOCUME~1/abiel/LOCALS~1/Temp/Rbuild709236257/MyPackage/src -ldlxapi32 -Lc:/PROGRA~1/R/R-211~1.0/bin -lR
c:/mingw/bin/../lib/gcc/mingw32/4.5.0/../../../../mingw32/bin/ld.exe: cannot find -ldlxapi32
在这里,我们可以看到$(CURDIR)被评估为/cygdrive/c.DOCUME~1 / ...我希望它会评估为C:/ programming / r / MyPackage / src,这是src目录的实际位置。有办法解决这个问题吗?
答案 0 :(得分:2)
而不是过于复杂-L$(CURDIR)
,为什么不使用等效的-L.
?
另外,Rtools套件使用的是不是Cygwin的MinGW,所以我要避免像/ cygdrive / c / ......这样的路径,对于MinGW,这仍然是c:/ ....