| 19 | 1/1 | 返回列表 |
| 查看: 1986 | 回復(fù): 18 | |||
[交流]
【求助】f77的ifdef語(yǔ)句
|
|
在看一個(gè)老的f77程序,其中inc文件有這么幾句: #ifdef BL real dd(nbig) #else real dd(1) #endif 好像是為了省點(diǎn)內(nèi)存。 但我用g95編譯不過去,說(shuō)第2個(gè)dd已經(jīng)被定義了。 該怎么處理呀? 謝謝 |
» 搶金幣啦!回帖就可以得到:
+5/330
+1/80
+1/80
+1/78
+1/56
+1/40
+1/35
+1/34
+1/16
+1/16
+1/14
+1/13
+1/9
+1/6
+1/5
+1/3
+1/3
+1/2
+1/2
+1/1
至尊木蟲 (職業(yè)作家)
|
makefile里有這么一句: .Inc.inc: @if [ -f $*.inc ]; then mv -f $*.inc $*.inc.bak; fi $(CPP) -D"real_precision"=$(FPREC) $(CPPFLAGS) $(FLOWFLAGS) $< >$*.inc 我現(xiàn)在所有的F文件都編譯過去了,只剩下幾個(gè)cpp文件編不過去。 原來(lái)的makefile是linux下的,我在xp下用gcc4.5, 肯定makefile改的還沒對(duì)。 [ Last edited by cean on 2010-12-4 at 21:18 ] |
至尊木蟲 (職業(yè)作家)
至尊木蟲 (職業(yè)作家)
|
我把小inc改了名,但好像這個(gè)前處理語(yǔ)句沒執(zhí)行到。 另外一個(gè).F.f的目標(biāo),我改.f成.for,生成了.for文件,但接下去編譯是自動(dòng)用f77了,我的gcc4.5帶的是gfortran. makefile里定義了f77=gfortran,但.for的名字就能用f77編吧。按來(lái)還得把名字改回.f .F.f: @if [ -f $*.f ]; then mv -f $*.f $*.f.bak; fi $(CPP) -D"real_precision"=$(FPREC) $(CPPFLAGS) $(FLOWFLAGS) $< >$*.f |
至尊木蟲 (職業(yè)作家)
|
回的真快。 不好意思貼一大段。 這是其中要插入的一個(gè)文件。原來(lái)是給linux的,我正試著改成win的。這個(gè)是流體程序duns,http://duns.sourceforge.net/home.html 我用的win下的gcc4.5.1是這里的 http://www.equation.com/servlet/equation.cmd?call=fortran 預(yù)處理怎么沒執(zhí)行到? .f和.F兩個(gè)目標(biāo),在win下我必須注釋掉一個(gè)。 謝謝 # # This makesystem was constructed on a PII machine running Linux. # We found we had to use fort77 (front-end to f2c) # instead of g77/f77 that comes with most distributions, although # we still link with the g2c directory. Enjoy. # .SUFFIXES: .Inc .inc .o .F .C .f .cpp .c F77 = gfortran CPP = gcc -C -x c -P -E -traditional-cpp CPLUS = g++ CC = gcc LINKER = gcc LIBMAKER= ar vr MKDIR =mkdir RM = del CP = copy #CHMOD = /bin/chmod CPPFLAGS = -DFUNDER -DISNAN #CFLAGS = -DRANGECHECK CFLAGS = -O2 F77FLAGS = -O2 -w #CPLUSFLAGS= -DRANGECHECK CPLUSFLAGS= -O2 LFLAGS = -Xlinker -Bstatic SYSLIBS = -L/usr/lib/gcc-lib/i486-suse-linux/2.95.2 -lg2c -lm GRAFLIBS = -lmbgrafic -lgrafic -L/usr/X11R6/lib -lX11 MACH = pcmach.o XGROBJ = Xunderscore.o #CPREC = double #FPREC = "double precision" CPREC = float FPREC = real VERSN = `2.7` .Inc.incw: @if [ -f $*.incw ]; then mv -f $*.incw $*.incw.bak; fi $(CPP) -D"real_precision"=$(FPREC) $(CPPFLAGS) $(FLOWFLAGS) $< >$*.incw .for.f: @if [ -f $*.f ]; then mv -f $*.f $*.f.bak; fi $(CPP) -D"real_precision"=$(FPREC) $(CPPFLAGS) $(FLOWFLAGS) $< >$*.f .cpp.c: @if [ -f $*.c ]; then mv -f $*.c $*.c.bak; fi $(CPP) -D"Include"="#include" -D"Define"="#define" -Dreal=$(CPREC) $(CPPFLAGS) $(FLOWFLAGS) $< >$*.c #.F.o: # $(CPP) -D"real_precision"=$(FPREC) $(CPPFLAGS) $(FLOWFLAGS) $< >$*.f $(F77) $(F77FLAGS) -c $*.f #.C.o: # $(CPLUS) $(INCLUDE) -Dreal=$(CPREC) $(CPLUSFLAGS) -c $< .f.o: $(F77) $(F77FLAGS) -c $< .c.o: $(CC) $(CFLAGS) -DVERSION=\"$(VERSN)\" -c $< [ Last edited by cean on 2010-12-6 at 11:03 ] |
至尊木蟲 (職業(yè)作家)
|
確實(shí)辛苦了。先把我剩下的金幣獻(xiàn)上。 我原來(lái)以為我可以不要這個(gè)SYSLIBS呢。不過好像只是和取系統(tǒng)時(shí)間的幾個(gè)小函數(shù)有關(guān)。 GRAFLIBS只是一個(gè)簡(jiǎn)單的畫圖程序要用到,沒什么用,確實(shí)可以不要。現(xiàn)在其他的后處理軟件強(qiáng)大多了。 這個(gè)程序一個(gè)主程序是c的,計(jì)算都是fortran的。 沒事只是想看看我能不能把它在win編過去。至少現(xiàn)在對(duì)預(yù)處理有了點(diǎn)了解。 我再試試。有一點(diǎn)是.F和.f的目標(biāo)不能共存,在win下gcc會(huì)不理其中的一個(gè)的。 謝謝。 [ Last edited by cean on 2010-12-6 at 20:20 ] |
至尊木蟲 (職業(yè)作家)
至尊木蟲 (職業(yè)作家)
|
我的情況是不是應(yīng)該寫: c:\gcc\i686-pc-mingw32\lib 現(xiàn)在我是能把所有的f都編譯過去了,但cpp都不行。 timer.cpp有句Include setsignals.cpp編譯錯(cuò)誤invalid use of undefined type 'struct sigaction'在31,32行 struct sigaction沒定義! 最后一個(gè)main.cpp還沒到可編譯的程度。 實(shí)在不行自己寫個(gè)main.f, timer和setsignals都不要了。 |
至尊木蟲 (職業(yè)作家)
|
我沒有在 windows 下測(cè)試這個(gè)軟件。首先,這個(gè)軟件在 Linux 的確可以編譯過去嗎?如果是,那么在 windows 下少的頭文件可能是系統(tǒng)依賴的。如果真是這樣,可能會(huì)比較麻煩,實(shí)在不行的話,去掉這個(gè)頭文件所涉及的內(nèi)容。 其次,如果你不是在多個(gè)體系上使用的話,完成可以不理會(huì)預(yù)編譯,直接把相關(guān)的代碼寫死在里面。當(dāng)然,如果要改動(dòng)的很多的話,那還是算了吧,太麻煩了,呵呵…… 抱歉,不能幫你什么,呵呵…… |
|
我在ubuntu10.04下試著編了一下,gcc現(xiàn)成的(應(yīng)該沒gfortran),fortran裝了個(gè)www.g95.org的, f和c都編譯過了,現(xiàn)在連接庫(kù)時(shí)有問題。 那個(gè)rh7的makefile里SYSLIBS = -lg2c -lm,我編譯說(shuō)找不到-lg2c。 這個(gè)-lg2c據(jù)說(shuō)是f77的庫(kù),供c連f的。這個(gè)程序是老了。呵呵。 不過預(yù)編譯挺有意思。這里是用它生成解決不同問題的源代碼。這樣可執(zhí)行文件對(duì)要解決的問題等于是優(yōu)化了的。 |
|
終于在linux和xp下都編譯過去了。 學(xué)到了兩點(diǎn): 1。預(yù)處理。 其實(shí)這個(gè)話題的標(biāo)題有誤,fortran沒有ifdef語(yǔ)句。用預(yù)處理把所有的ifdef語(yǔ)句都會(huì)處理掉。這時(shí)的源代碼才需要編譯呢。 2。c和f的混合編程 這個(gè)程序主程序是main.c,它調(diào)用所有的fortran子程序。但是更復(fù)雜一點(diǎn)的是還有幾個(gè)fortran子程序調(diào)用time.c。 在xp下為了簡(jiǎn)化編譯,把調(diào)time.c的語(yǔ)句c住了。 處理好這兩點(diǎn),編譯就過去了。 |
| 19 | 1/1 | 返回列表 |
| 最具人氣熱帖推薦 [查看全部] | 作者 | 回/看 | 最后發(fā)表 | |
|---|---|---|---|---|
|
[考研] 281求調(diào)劑(0805) +6 | 煙汐憶海 2026-03-16 | 16/800 |
|
|---|---|---|---|---|
|
[考研] 304求調(diào)劑 +6 | 司空. 2026-03-18 | 6/300 |
|
|
[考研] 311求調(diào)劑 +4 | 冬十三 2026-03-18 | 4/200 |
|
|
[考研] 能源材料化學(xué)課題組招收碩士研究生8-10名 +4 | 脫穎而出 2026-03-16 | 10/500 |
|
|
[考研] 328求調(diào)劑,英語(yǔ)六級(jí)551,有科研經(jīng)歷 +3 | 生物工程調(diào)劑 2026-03-16 | 10/500 |
|
|
[考研] 304求調(diào)劑 +12 | 小熊joy 2026-03-14 | 13/650 |
|
|
[考研] 293求調(diào)劑 +11 | zjl的號(hào) 2026-03-16 | 16/800 |
|
|
[考研] 301求調(diào)劑 +4 | A_JiXing 2026-03-16 | 4/200 |
|
|
[考研] 332求調(diào)劑 +6 | Zz版 2026-03-13 | 6/300 |
|
|
[考研] 材料與化工專碩調(diào)劑 +5 | heming3743 2026-03-16 | 5/250 |
|
|
[考研] 一志愿南京大學(xué),080500材料科學(xué)與工程,調(diào)劑 +4 | Jy? 2026-03-16 | 4/200 |
|
|
[考研] 285化工學(xué)碩求調(diào)劑(081700) +9 | 柴郡貓_ 2026-03-12 | 9/450 |
|
|
[論文投稿] 有沒有大佬發(fā)小論文能帶我個(gè)二作 +3 | 增銳漏人 2026-03-17 | 4/200 |
|
|
[考研] 一志愿211 0703方向310分求調(diào)劑 +3 | 努力奮斗112 2026-03-15 | 3/150 |
|
|
[考研] 085601材料工程315分求調(diào)劑 +3 | yang_0104 2026-03-15 | 3/150 |
|
|
[考研] 297一志愿上交085600求調(diào)劑 +5 | 指尖八千里 2026-03-14 | 5/250 |
|
|
[考研] 復(fù)試調(diào)劑 +3 | 呼呼?~+123456 2026-03-14 | 3/150 |
|
|
[考研] 281求調(diào)劑 +9 | Koxui 2026-03-12 | 11/550 |
|
|
[考研] 土木第一志愿276求調(diào)劑,科研和技能十分豐富,求新興方向的導(dǎo)師收留 +3 | 土木小天才 2026-03-12 | 3/150 |
|
|
[考研] 085600材料與化工 309分請(qǐng)求調(diào)劑 +7 | dtdxzxx 2026-03-12 | 8/400 |
|