2013-03-26 61 views
0

我最近不得不返回老bugbe:編譯fortran腳本以在Mac上運行Matlab。我已經設法將示例c文件編譯爲mex,但Fortran文件拒絕,除非我使用-c和我的願望對象kt3d.for,拋出了一個有趣的列表,但都鏈接到相同的錯誤(我猜) 。將Fortran編譯爲Mac上的mex

我使用XCode 4.6.1在OSX 10.7.5上運行Matlab R2011b。

我根據http://www.mathworks.se/support/solutions/en/data/1-FR6LXJ/

修補Matlab的有一個Fortran編譯根據https://sites.google.com/site/dwhipp/tutorials/mac_compilers

運行我改變了MEX文件來調用bash而不是SH,但仍然沒有喜悅。每次我想運行一個克立格軟件包時都不得不啓動舊的XP機器,所以我真的很想爲OSX編譯這些東西。

下面是錯誤,它看起來像一個架構問題,但我無法弄清楚如何解決它。

>> mex kt3d.for 
Undefined symbols for architecture x86_64: 
    "_chknam_", referenced from: 
     _readparm_ in kt3d.o 
    "_cova3_", referenced from: 
     _kt3d_ in kt3d.o 
    "_ktsol_", referenced from: 
     _kt3d_ in kt3d.o 
    "_mexfunction_", referenced from: 
    -exported_symbol[s_list] command line option 
    "_picksup_", referenced from: 
     _kt3d_ in kt3d.o 
    "_setrot_", referenced from: 
     _kt3d_ in kt3d.o 
    "_setsupr_", referenced from: 
     _kt3d_ in kt3d.o 
    "_srchsupr_", referenced from: 
     _kt3d_ in kt3d.o 
ld: symbol(s) not found for architecture x86_64 
collect2: ld returned 1 exit status 

    mex: link of ' "kt3d.mexmaci64"' failed. 

Error using mex (line 206) 
Unable to complete successfully. 

回答

1

我相信那些符號可以在GSLIB找到。假設你已經安裝了這個程序,並且你的編譯器可以找到它,你可能需要在你的mex命令中加入「-lgslib」之類的東西來讓它爲你鏈接庫。

+0

我正在編譯GSLIB包中的kt3d.for腳本,但它似乎無法找到其他函數。這是一個鏈接錯誤? – mercergeoinfo 2013-03-27 10:39:10

+0

好吧,回到GSLIB網頁,重新閱讀編譯指令,並在gslib2上試用。我迷路了。我將gslib_compile.bat調整爲sh並運行。這似乎沒有給出預期的結果。在這裏顯示輸出,但迷你Markdown'代碼'似乎不會產生可讀的文本。基本上它找不到似乎不合理的文件,因爲它們應該存在的子文件夾不存在,可執行文件似乎直接位於/ bin – mercergeoinfo 2013-03-27 11:20:13

+0

我不能說我曾經使用過GSLIB,所以如果你可以編輯你的問題來添加你的代碼,那會很好。另外,我注意到'_mexfunction_'是缺少的符號之一,這表明你正在編譯的文件實際上並不是MATLAB MEX擴展。它實際上是否有一個名爲mexFunction的函數? http://www.mathworks.com/help/matlab/apiref/mexfunction.html – kwatford 2013-03-27 12:02:30