簡體   English   中英

在Windows下為R軟件包編譯Fortran代碼:對REXIT,RWARN,RCHKUSR的未定義引用

[英]Compiling Fortran code for R package under Windows: Undefined reference to REXIT, RWARN, RCHKUSR

我正在處理包含Fortran源文件的R包。 Fortran代碼的結構相當復雜,具有許多依賴性,因此我在src文件夾中有一個Makefile用於編譯共享庫。

到目前為止,我一直在運行Ubuntu 14.04的計算機上編譯此軟件包,沒有任何問題。 我現在正在嘗試使用Rtools在Windows上對其進行編譯,並且在鏈接對象以生成共享庫時遇到了問題。 更准確地說,鏈接器找不到函數REXIT,RWARN和RCHKUSR,因為我收到以下錯誤消息:

undefined reference to `rchkusr_'
undefined reference to `rexit_'
undefined reference to `rwarn_'

這些功能應該位於共享庫R.dll(Linux下為libR.so)中。 我用Dependencies Walker檢查了這個庫,然后找到了這些函數。 我試圖與-IC:/Program\\ Files/R/R-3.1.1/bin/i386/R.dll ,以明確引用共享庫。 我試圖用-fno-underscoring重新編譯以確保下划線不是問題。 沒有任何幫助。

有什么想法可能來自這個問題嗎? 任何建議都將受到歡迎!

在Linux下,我不需要做任何特殊的事情,鏈接程序無需在Makefile中指定任何內容就可以找到函數。

我正在使用R版本3.1.1和Rtools版本3.1。

非常感謝您的幫助。

擺弄Makefile之后,我終於找到了解決問題的方法:我試圖傳遞給鏈接器的標志是錯誤的。 僅應使用-L指定共享庫R.dll的路徑,並應在命令末尾使用標志-lR指定庫的名稱。 簡而言之,我指定

gfortran -shared *.o -o myLib.dll -L C:/Program\ Files/R/R-3.1.1/bin/i386 -lR

創建myLib.dll,它起作用了! 我想我很困惑,因為在Linux下無需指定任何內容,鏈接程序可以自行找到共享庫。

可能不是最好的,最便攜的解決方案,我可以得到(我現在有兩個Makefile文件來處理, Makefile用於Linux和Makefile.win為Windows ...),但現在不夠好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM