kompilasi dengan cygwin/gfortran atau ifort dengan acml

Saya ingin mengkompilasi program saya yang terhubung ke acml. Di cygwin (win64) dengan gfortran terhubung ke acml:

$ gfortran empty.f90 -L/c:/cygwin64/acml5.3.1/win64/lib/libacml_dll.lib

hasil

/tmp/ccKechZN.o:empty.f90:(.text+0xff): undefined reference to `drandinitialize_'
/tmp/ccKechZN.o:empty.f90:(.text+0xff): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `drandinitialize_'
/tmp/ccKechZN.o:empty.f90:(.text+0x13b): undefined reference to `drandgaussian_'
/tmp/ccKechZN.o:empty.f90:(.text+0x13b): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `drandgaussian_'
collect2: error: ld returned 1 exit status

Saya mencoba beberapa hal lain dengan bantuan dokumentasi, tetapi tidak ada telah berhasil mengizinkan kompiler untuk terhubung dengan acml. Saya juga mencoba menautkan ke perpustakaan dengan menambahkan -l acml_dll dan menerima kesalahan berikut:

/usr/lib/gcc/x86_64-pc-cygwin/4.9.3/../../../../x86_64-pc-cygwin/bin/ld: cannot find -lacml_dll
collect2: error: ld returned 1 exit status

Saya telah memverifikasi bahwa .lib ada di direktori yang ditentukan. Mungkin masalah terkait, saya juga mencoba menjalankan output dari ifort yang ditautkan ke acml di win64. Saya menggunakan command prompt "Intel 64 Visual Studio 2013 mode" untuk mengkompilasi program contoh yang memanggil subrutin dari acml (lihat dokumentasi untuk menghubungkan di win64):

ifort /libs:dll empty.f90 c:/AMD/acml5.3.1/ifort64_int64/lib/libacml__dll.lib

yang menghasilkan

Intel(R) Visual Fortran Intel(R) 64 Compiler XE for applications running on Intel(R) 64, Version 14.0.5.239 Build 20150212
Copyright (C) 1985-2014 Intel Corporation.  All rights reserved.

Microsoft (R) Incremental Linker Version 12.00.21005.1
Copyright (C) Microsoft Corporation.  All rights reserved.

-out:empty.exe
-subsystem:console
empty.obj

Setidaknya dengan mudah program dapat dikompilasi dengan sukses. Kemudian ketika saya menjalankan blank.exe saya mendapatkan kesalahan berikut:

Program tidak dapat dijalankan karena libacml_dll.dll hilang dari komputer Anda. Coba instal ulang program untuk memperbaiki masalah ini.

Saya mencoba menginstal ulang acml 5.3.1 serta mencoba acml 6.1.0, tetapi mengalami kesalahan yang sama saat dijalankan.


person nathrock    schedule 19.02.2016    source sumber


Jawaban (1)


Menentukan jalur perpustakaan saja tidak cukup. Anda harus memberi tahu kompiler untuk menautkan ke perpustakaan juga. Cukup tambahkan -l acml_dll ke opsi kompilasi.

Selain itu, menentukan jalur perpustakaan dengan -L mengharapkan jalur, bukan file. Jadi perintah lengkapnya akan terlihat seperti ini

gfortran empty.f90 -L/c:/cygwin64/acml5.3.1/win64/lib/ -lacml_dll

Saat Anda menjalankan program, perpustakaan juga perlu ditemukan saat runtime. Cara termudah untuk mencapai hal ini adalah dengan menggunakan rpath:

gfortran empty.f90 -L/c:/cygwin64/acml5.3.1/win64/lib/ -lacml_dll \
                   -Wl,-rpath=/c:/cygwin64/acml5.3.1/win64/lib/
person Alexander Vogt    schedule 19.02.2016
comment
Saya mencoba apa yang Anda sarankan, tetapi tidak dapat menemukan lacml_dll. Saya mengonfirmasi bahwa direktori tersebut ada dan perpustakaan terletak di sana. - person nathrock; 20.02.2016