c - Libgfortran.a से लिंक करने में असमर्थ



cuda linker (1)

आपको उस क्रम को बदलने की आवश्यकता है जिसमें आप लिंकर के लिए स्थिर पुस्तकालय निर्दिष्ट करते हैं। यदि आप ऐसा कुछ करते हैं:

nvcc --cudart static -L/usr/lib/gcc/x86_64-linux-gnu/4.6 \
-L/home/chung/lapack-3.5.0 -link -o  "pQP"  ./src/pQP.o  \ 
-llapacke -llapack -lcublas -lblas -lcurand -lgfortran 

आपको यह पता लगाना चाहिए कि यह काम करेगा

अंतर्निहित कारण (और यह जीसीसी / ग्नू टूलचैन का एक लक्षण है और एनवीसीसी के साथ कुछ नहीं करना) यह है कि स्थैतिक पुस्तकालयों के लिए निर्भरता सूची को जोड़ने से बाएं से दाएं से ग्नु लिंकर द्वारा पार्स किया जाता है यदि आप किसी पुस्तकालय से पहले किसी स्थैतिक लाइब्रेरी को निर्दिष्ट करते हैं जो उस पर निर्भर करता है, तो इसे छोड़ दिया जाएगा क्योंकि इसकी पहली सूची में प्रसंस्करण में बिंदु पर लिंक सूची में कोई निर्भरता नहीं है।

मेरे सिस्टम पर gfortran स्थापित है और फ़ाइल libgfortran.a /usr/lib/gcc/x86_64-linux-gnu/4.6/ पर पाया जा सकता है nm का उपयोग करना मुझे यकीन है कि फ़ंक्शन _gfortran_compare_string को वहां पर परिभाषित किया गया है:

$ nm /usr/lib/gcc/x86_64-linux-gnu/4.6/libgfortran.a | grep _gfortran_compare_string

रिटर्न

0000000000000000 T _gfortran_compare_string
0000000000000000 T _gfortran_compare_string_char4

लेकिन, मेरे CUDA-C कार्यक्रम के लिंकर त्रुटियों को फेंकता है:

/usr/local/cuda-6.0/bin/nvcc --cudart static -L/usr/lib/gcc/x86_64-linux-gnu/4.6 -L/home/chung/lapack-3.5.0 -link -o  "pQP"  ./src/pQP.o   -lgfortran -llapacke -llapack -lcublas -lblas -lcurand
nvcc warning : The 'compute_10' and 'sm_10' architectures are deprecated, and may be removed in a future release.
/home/chung/lapack-3.5.0/liblapack.a(ilaenv.o): In function `ilaenv_':
ilaenv.f:(.text+0x81): undefined reference to `_gfortran_compare_string'

और बाद में दूसरी त्रुटि पर, फिर से लिब्फ्रिफ्रोरान से संबंधित:

/home/chung/lapack-3.5.0/liblapack.a(xerbla.o): In function `xerbla_':
xerbla.f:(.text+0x49): undefined reference to `_gfortran_st_write'
xerbla.f:(.text+0x54): undefined reference to `_gfortran_string_len_trim'
xerbla.f:(.text+0x66): undefined reference to `_gfortran_transfer_character_write'
xerbla.f:(.text+0x76): undefined reference to `_gfortran_transfer_integer_write'
xerbla.f:(.text+0x7e): undefined reference to `_gfortran_st_write_done'
xerbla.f:(.text+0x87): undefined reference to `_gfortran_stop_string'

लेकिन, फिर एनएम का उपयोग करके, मुझे पता चला कि _gfortran_st_write , आदि को libgfortran.a में परिभाषित किया गया है।

लिंक: पूरा लॉग और स्रोत कोड

नोट: लेपैक लिम्बर्गरैन का उपयोग करता है मैंने हाल ही में लैपैक स्थापित किया और सभी परीक्षण चलाए और वे सभी पारित हो गए