سؤال

تحياتي للجميع،

محاولة الترجمة باستخدام g++ وتحتاج إلى ربط مكتبات f90 القياسية (أو f77 حتى) لبعض أكواد مصدر فورتران في ملف Makefile الخاص بي.لا أستطيع العثور على اسمه في أي مكان.

ملف صانع:

products: SlowDynamic.exe

SlowDynamic.exe: main.o SA.o mersenne.o CFE.o BCs.o EMatrix.o Numbering.o KMatrix.o Solve.o MA_57.o blas.o MA_57_Depend.o Metis.o
    g++ -L/usr/sfw/lib -R/usr/sfw/lib -lgcc_s -lstdc++ -o SlowDynamic.exe main.o \
        SA.o mersenne.o CFE.o MA_57.o blas.o MA_57_Depend.o Metis.o\
        BCs.o EMatrix.o Numbering.o KMatrix.o Solve.o

main.o: main.cpp
    g++ -c -o main.o main.cpp

SA.o: SA.cpp
    g++ -c -o SA.o SA.cpp

mersenne.o: mersenne.cpp
    g++ -c -o mersenne.o mersenne.cpp

CFE.o: CFE.c
    gcc -c -o CFE.o CFE.c

MA_57.o: MA_57.f
    f77 -c -o MA_57.o MA_57.f

blas.o: blas.f
    f77 -c -o blas.o blas.f

MA_57_Depend.o: MA_57_Depend.f
    f77 -c -o MA_57_Depend.o MA_57_Depend.f

Metis.o: Metis.f
    f77 -c -o Metis.o Metis.f

BCs.o: BCs.c
    gcc -c -o BCs.o BCs.c

EMatrix.o: EMatrix.c
    gcc -c -o EMatrix.o EMatrix.c

Numbering.o: Numbering.c
    gcc -c -o Numbering.o Numbering.c

KMatrix.o: KMatrix.c
    gcc -c -o KMatrix.o KMatrix.c

Solve.o : Solve.c
    gcc -c -o Solve.o Solve.c

clean: 
    rm *.o Main.exe *.gpi

مترجم:

birch $ make
mksh: Warning: newline is not last character in file Makefile
Current working directory /u/f/osv20/Y4-UNIX/complete
g++ -L/usr/sfw/lib -R/usr/sfw/lib -lgcc_s -o SlowDynamic.exe main.o \
        SA.o mersenne.o CFE.o MA_57.o blas.o MA_57_Depend.o Metis.o\
        BCs.o EMatrix.o Numbering.o KMatrix.o Solve.o
Undefined                       first referenced
 symbol                             in file
__f90_sfw_i4                        MA_57.o
__f90_sfw_ch                        MA_57.o
__f90_sfw_r4                        MA_57.o
__f90_ifw_ch                        MA_57.o
__f90_ifw_r4                        MA_57.o
__nintf                             MA_57.o
__s_cmp                             blas.o
__r_sign                            MA_57_Depend.o
__f90_sifw                          MA_57.o
__f90_ssfw                          MA_57.o
__f90_stop                          blas.o
__f90_esfw                          MA_57.o
__f90_eifw                          MA_57.o
ld: fatal: Symbol referencing errors. No output written to SlowDynamic.exe
collect2: ld returned 1 exit status
*** Error code 1
make: Fatal error: Command failed for target `SlowDynamic.exe'

نتائج تشغيل 'f77 -v hello.f'

amos $ f77 -v hello.f
NOTICE: Invoking /usr/bin/f90 -f77 -ftrap=%none -v hello.f
###     command line files and options (expanded):
### -f77=%all -ftrap=%none -v hello.f -lf77compat
### f90: Note: NLSPATH = /opt/SUNWspro/prod/bin/../lib/locale/%L/LC_MESSAGES/%N.cat:/opt/SUNWspro/prod/bin/../../lib/locale/%L/LC_MESSAGES/%N.cat
/opt/SUNWspro/prod/bin/f90comp -y-o -yhello.o -ev -y-ftrap=%none -m3 -dq -y-fbe -y/opt/SUNWspro/prod/bin/fbe -y-xarch=generic -y-s -H "/opt/SUNWspro/prod/bin/f90 -f77 -ftrap=%none -v " -y-xcache=generic -xcache=generic -I/opt/SUNWspro/prod/include/f95/v8 -p/opt/SUNWspro/prod/lib/modules -y-verbose -xall -xmemalign=8i -y-xmemalign=8i -f77=%all -y-xdbggen=no%stabs+dwarf2 -y-xdbggen=incl -xassume_control=optimize -y-xassume_control=optimize -iorounding=processor-defined -xhasc=yes hello.f
hello.f:
 MAIN hellow:
### f90: Note: LD_LIBRARY_PATH = (null)
### f90: Note: LD_RUN_PATH     = (null)
### f90: Note: LD_OPTIONS = (null)
/usr/ccs/bin/ld -t -R/opt/SUNWspro/lib/sparc:/opt/SUNWspro/lib -o a.out /opt/SUNWspro/prod/lib/crti.o /opt/SUNWspro/prod/lib/crt1.o /opt/SUNWspro/prod/lib/misalign.o /opt/SUNWspro/prod/lib/values-xi.o -Y P,/opt/SUNWspro/lib/sparc:/opt/SUNWspro/prod/lib/sparc:/opt/SUNWspro/lib:/opt/SUNWspro/prod/lib:/usr/ccs/lib:/lib:/usr/lib hello.o -lf77compat -lfui -lfai -lfai2 -lfsumai -lfprodai -lfminlai -lfmaxlai -lfminvai -lfmaxvai -lfsu -lsunmath -Bdynamic -lmtsk -lm -lc /opt/SUNWspro/prod/lib/crtn.o
rm hello.o

نتائج تشغيل 'f90 -v hello.f'

amos $ f90 -v hello.f
###     command line files and options (expanded):
### -v hello.f
### f90: Note: NLSPATH = /opt/SUNWspro/prod/bin/../lib/locale/%L/LC_MESSAGES/%N.cat:/opt/SUNWspro/prod/bin/../../lib/locale/%L/LC_MESSAGES/%N.cat
/opt/SUNWspro/prod/bin/f90comp -y-o -yhello.o -ev -y-ftrap=common -m3 -dq -y-fbe -y/opt/SUNWspro/prod/bin/fbe -y-xarch=generic -y-s -H "/opt/SUNWspro/prod/bin/f90 -v " -y-xcache=generic -xcache=generic -I/opt/SUNWspro/prod/include/f95/v8 -p/opt/SUNWspro/prod/lib/modules -y-verbose -xall -xmemalign=8i -y-xmemalign=8i -y-xdbggen=no%stabs+dwarf2 -y-xdbggen=incl -xassume_control=optimize -y-xassume_control=optimize -iorounding=processor-defined -xhasc=yes hello.f
### f90: Note: LD_LIBRARY_PATH = (null)
### f90: Note: LD_RUN_PATH     = (null)
### f90: Note: LD_OPTIONS = (null)
/usr/ccs/bin/ld -t -R/opt/SUNWspro/lib/sparc:/opt/SUNWspro/lib -o a.out /opt/SUNWspro/prod/lib/crti.o /opt/SUNWspro/prod/lib/crt1.o /opt/SUNWspro/prod/lib/misalign.o /opt/SUNWspro/prod/lib/values-xi.o -Y P,/opt/SUNWspro/lib/sparc:/opt/SUNWspro/prod/lib/sparc:/opt/SUNWspro/lib:/opt/SUNWspro/prod/lib:/usr/ccs/lib:/lib:/usr/lib hello.o -lfui -lfai -lfai2 -lfsumai -lfprodai -lfminlai -lfmaxlai -lfminvai -lfmaxvai -lfsu -lsunmath -Bdynamic -lmtsk -lm -lc /opt/SUNWspro/prod/lib/crtn.o
rm hello.o

نتائج الترجمة الناجحة باستخدام f77:

amos $ make
mksh: Warning: newline is not last character in file Makefile
Current working directory /u/f/osv20/Y4-UNIX/complete
g++ -c -o main.o main.cpp
In file included from main.cpp:16:
SA.h:85:9: warning: no newline at end of file
main.cpp:38:2: warning: no newline at end of file
g++ -c -o SA.o SA.cpp
In file included from SA.cpp:22:
SA.h:85:9: warning: no newline at end of file
In file included from SA.cpp:23:
CFE.h:25:8: warning: no newline at end of file
SA.cpp:468:4: warning: no newline at end of file
g++ -c -o mersenne.o mersenne.cpp
gcc -c -o CFE.o CFE.c
In file included from BCs.h:9,
                 from CFE.c:29:
fg_types.h:38:7: warning: no newline at end of file
In file included from CFE.c:29:
BCs.h:15:84: warning: no newline at end of file
In file included from CFE.c:32:
KMatrix.h:12:171: warning: no newline at end of file
In file included from CFE.c:34:
Solve.h:9:91: warning: no newline at end of file
CFE.c: In function `CFE':
CFE.c:145: warning: `return' with a value, in function returning void
gcc -c -o BCs.o BCs.c
In file included from BCs.h:9,
                 from BCs.c:9:
fg_types.h:38:7: warning: no newline at end of file
In file included from BCs.c:9:
BCs.h:15:84: warning: no newline at end of file
BCs.c:74:2: warning: no newline at end of file
gcc -c -o EMatrix.o EMatrix.c
In file included from EMatrix.h:9,
                 from EMatrix.c:9:
fg_types.h:38:7: warning: no newline at end of file
EMatrix.c:78:2: warning: no newline at end of file
gcc -c -o Numbering.o Numbering.c
In file included from Numbering.h:8,
                 from Numbering.c:8:
fg_types.h:38:7: warning: no newline at end of file
Numbering.c:144:3: warning: no newline at end of file
gcc -c -o KMatrix.o KMatrix.c
In file included from KMatrix.h:8,
                 from KMatrix.c:9:
fg_types.h:38:7: warning: no newline at end of file
In file included from KMatrix.c:9:
KMatrix.h:12:171: warning: no newline at end of file
KMatrix.c:194:2: warning: no newline at end of file
gcc -c -o Solve.o Solve.c
In file included from Solve.c:8:
Solve.h:9:91: warning: no newline at end of file
Solve.c:95:2: warning: no newline at end of file
f77 -c -o MA_57.o MA_57.f
NOTICE: Invoking /usr/bin/f90 -f77 -ftrap=%none -c -o MA_57.o MA_57.f
MA_57.f:
        ma57i:
        ma57a:
        ma57b:
        ma57c:
        ma57q:
        ma57r:
        ma57u:
        ma57s:
        ma57t:
        ma57d:
        ma57e:
        ma57g:
        ma57j:
        ma57k:
        ma57f:
        ma57l:
        ma57m:
        ma57n:
        ma57o:
        ma57p:
        ma57w:
        ma57x:
        ma57y:
        ma57v:
        ma57h:
        ma57z:
f77 -c -o blas.o blas.f
NOTICE: Invoking /usr/bin/f90 -f77 -ftrap=%none -c -o blas.o blas.f
blas.f:
        sgemm:
        stpsv:
        isamax:
        xerbla:
        lsame:
        sgemv:
f77 -c -o MA_57_Depend.o MA_57_Depend.f
NOTICE: Invoking /usr/bin/f90 -f77 -ftrap=%none -c -o MA_57_Depend.o MA_57_Depend.f
MA_57_Depend.f:
        mc47a:
        mc47b:
        mc71a:
        mc34a:
        mc59a:
        mc59b:
        mc59c:
        mc59d:
        mc59e:
        mc59f:
        ma27i:
        ma27a:
        ma27b:
        ma27c:
        ma27g:
        ma27h:
        ma27u:
        ma27j:
        ma27k:
        ma27l:
        ma27m:
        ma27n:
        ma27o:
        ma27p:
        ma27q:
        ma27r:
        mc64i:
        mc64a:
        mc64b:
        mc64d:
        mc64e:
        mc64f:
        mc64r:
        mc64s:
        mc64q:
        mc64u:
        mc64w:
        mc21a:
        mc21b:
        fd15a:
f77 -c -o Metis.o Metis.f
NOTICE: Invoking /usr/bin/f90 -f77 -ftrap=%none -c -o Metis.o Metis.f
Metis.f:
        metis_nodend:
f77 -L/usr/sfw/lib -R/usr/sfw/lib -lgcc_s -lstdc++ -o SlowDynamic.exe main.o \
        SA.o mersenne.o CFE.o MA_57.o blas.o MA_57_Depend.o Metis.o\
        BCs.o EMatrix.o Numbering.o KMatrix.o Solve.o
NOTICE: Invoking /usr/bin/f90 -f77 -ftrap=%none -L/usr/sfw/lib -R/usr/sfw/lib -lgcc_s -lstdc++ -o SlowDynamic.exe main.o SA.o mersenne.o CFE.o MA_57.o blas.o MA_57_Depend.o Metis.o BCs.o EMatrix.o Numbering.o KMatrix.o Solve.o
هل كانت مفيدة؟

المحلول

ما هو إصدار دول مجلس التعاون الخليجي الذي تستخدمه؟لقد تغير مترجم فورتران في دول مجلس التعاون الخليجي بالكامل بمرور الوقت (g77 مقابل gfortran) - لذا فإن الإجابة الصحيحة تعتمد بشكل كبير على الإصدارات الدقيقة.لقد مر وقت طويل منذ أن كنت بحاجة إلى القيام بذلك (وقد استخدمت إصدارات g77 القديمة - لذا ربما تكون الأمور قد تغيرت) ولكني أتذكر أن هناك خيارين في ذلك الوقت هما:

  • حاول الارتباط باستخدام g77 وقم بتضمين المكتبة -lstdc++ (وربما -lm؟)
  • حاول الارتباط باستخدام g++ وقم بتضمين المكتبات -lg2c -lm (وربما -lfrtbegin؟)

إذا كنت تستخدم gfortran الأحدث، فيجب أن يعمل -lgfortran في حالة الارتباط بـ g++ و -lstdc++ في حالة الارتباط بـ gfortran.

تريد أيضًا التأكد من أن الأمرين g++ وf77 في ملف التعريف الخاص بك يقومان بتشغيل الأوامر التي تتوقع تشغيلهما (على سبيل المثال.عدم الوصول إلى الملفات التنفيذية في أدلة غير متوقعة أو إصدارات مختلفة/غير متوافقة).

يحرر:من تعديلاتك الأخيرة على سؤالك، يبدو أنك تحاول ربط برنامج التحويل البرمجي SUN f77 مع G++ g++.لا أعتقد أن هذا ممكن.حاول استخدام g77 أو gfortran الخاص بدول مجلس التعاون الخليجي بدلاً من SUN f77.

نصائح أخرى

راوغنار،

أحيلك إلى إجابتي على سؤالك السابق حول الرموز التي لم يتم حلها.

فقط قم بتشغيل:

f77 -v something.f

في برنامج Fortran90 مستقل وسيكشف المترجم بالضبط عن مكتبات الدعم المرتبطة افتراضيًا.

لا يوجد في فورتران "مكتبات قياسية".لديها الكثير من الوظائف الجوهرية، لكنها جزء من اللغة، يحددها المعيار.


الإجابات على التعليقات، نظرًا لأن حقل التعليق مقيد بعض الشيء فيما يتعلق بعدد الأحرف:

@ مايكل - نعم، يمكنك قول ذلك.ولكن، لا يزال الأمر ليس هو نفسه كما هو الحال مع اللغات الأخرى التي ربما تكون معتادًا عليها.ما أعنيه هو هذا؛عندما تقوم بتجميع وبناء برنامج فورتران، فإن المترجم أو الرابط لا يتطلب منك تضمين مكتبات في العملية.هذا هو الشيء الداخلي للمترجم.ينطبق هذا على الوظائف "القياسية" (الجوهريات وما شابه).

إذا كنت تستخدم بعض الوظائف الخارجية أو الإجراءات الفرعية (على سبيل المثال، بعض إجراءات التخطيط) فأنت بحاجة إلى تضمينها بشكل منفصل.

لكن إذا كنت تستخدم دوالًا رياضية قياسية والتي تعد جزءًا من اللغة، فستكون مهمتك قد انتهت.أنت تكتب برنامجك، وتجميعه وتبنيه.لا حاجة لمعرفة أين أو كيف يتم تنفيذ هذه الوظائف، وأين يتم تخزين التطبيقات وما إلى ذلك.هذه هي مهمة المترجم.

أخيرًا تم إصلاح الحل بمزيج من نصائح الجميع.

بمجرد أن أدركت أنني كنت أستخدم SUN بدلاً من دول مجلس التعاون الخليجي، قمت بالتبديل إلى الترجمة باستخدام cc (gcc)، وCC (g++) وf95 (f77).

ما حل المشكلة هو لصق سطر الرابط بالكامل من التعليقات المطولة f77 (أعلاه في المشاركة الرئيسية) وحذف الأجزاء التي لم تساهم تدريجيًا.وفي النهاية أضيف النص التالي:

-t -R/opt/SUNWspro/lib/sparc:/opt/SUNWspro/lib -Y P,/opt/SUNWspro/lib/sparc:/opt/SUNWspro/prod/lib/sparc:/opt/SUNWspro/lib:/ opt/SUNWspro/prod/lib:/usr/ccs/lib:/lib:/usr/lib -lfui -lfai -lfai2 -lfsumai -lfprodai -lfminlai -lfmaxlai -lfminvai -lfmaxvai -lfsu -lsunmath -Bdynamic -lmtsk -lm -LC

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top