| 19 | 1/1 | 返回列表 |
| 查看: 1987 | 回復(fù): 18 | |||
[交流]
【求助】f77的ifdef語句
|
|
在看一個(gè)老的f77程序,其中inc文件有這么幾句: #ifdef BL real dd(nbig) #else real dd(1) #endif 好像是為了省點(diǎn)內(nèi)存。 但我用g95編譯不過去,說第2個(gè)dd已經(jīng)被定義了。 該怎么處理呀? 謝謝 |
» 搶金幣啦!回帖就可以得到:
+1/85
+2/84
+1/80
+1/78
+1/50
+1/47
+2/44
+2/38
+1/34
+1/20
+1/12
+5/10
+1/7
+1/6
+1/6
+1/5
+1/5
+1/2
+1/1
+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文件編不過去。 原來的makefile是linux下的,我在xp下用gcc4.5, 肯定makefile改的還沒對。 [ Last edited by cean on 2010-12-4 at 21:18 ] |
至尊木蟲 (職業(yè)作家)
至尊木蟲 (職業(yè)作家)
|
我把小inc改了名,但好像這個(gè)前處理語句沒執(zhí)行到。 另外一個(gè).F.f的目標(biāo),我改.f成.for,生成了.for文件,但接下去編譯是自動用f77了,我的gcc4.5帶的是gfortran. makefile里定義了f77=gfortran,但.for的名字就能用f77編吧。按來還得把名字改回.f .F.f: @if [ -f $*.f ]; then mv -f $*.f $*.f.bak; fi $(CPP) -D"real_precision"=$(FPREC) $(CPPFLAGS) $(FLOWFLAGS) $< >$*.f |
至尊木蟲 (職業(yè)作家)
|
回的真快。 不好意思貼一大段。 這是其中要插入的一個(gè)文件。原來是給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)上。 我原來以為我可以不要這個(gè)SYSLIBS呢。不過好像只是和取系統(tǒng)時(shí)間的幾個(gè)小函數(shù)有關(guān)。 GRAFLIBS只是一個(gè)簡單的畫圖程序要用到,沒什么用,確實(shí)可以不要,F(xiàn)在其他的后處理軟件強(qiáng)大多了。 這個(gè)程序一個(gè)主程序是c的,計(jì)算都是fortran的。 沒事只是想看看我能不能把它在win編過去。至少現(xiàn)在對預(yù)處理有了點(diǎn)了解。 我再試試。有一點(diǎn)是.F和.f的目標(biāo)不能共存,在win下gcc會不理其中的一個(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 下測試這個(gè)軟件。首先,這個(gè)軟件在 Linux 的確可以編譯過去嗎?如果是,那么在 windows 下少的頭文件可能是系統(tǒng)依賴的。如果真是這樣,可能會比較麻煩,實(shí)在不行的話,去掉這個(gè)頭文件所涉及的內(nèi)容。 其次,如果你不是在多個(gè)體系上使用的話,完成可以不理會預(yù)編譯,直接把相關(guān)的代碼寫死在里面。當(dāng)然,如果要改動的很多的話,那還是算了吧,太麻煩了,呵呵…… 抱歉,不能幫你什么,呵呵…… |
|
我在ubuntu10.04下試著編了一下,gcc現(xiàn)成的(應(yīng)該沒gfortran),fortran裝了個(gè)www.g95.org的, f和c都編譯過了,現(xiàn)在連接庫時(shí)有問題。 那個(gè)rh7的makefile里SYSLIBS = -lg2c -lm,我編譯說找不到-lg2c。 這個(gè)-lg2c據(jù)說是f77的庫,供c連f的。這個(gè)程序是老了。呵呵。 不過預(yù)編譯挺有意思。這里是用它生成解決不同問題的源代碼。這樣可執(zhí)行文件對要解決的問題等于是優(yōu)化了的。 |
|
終于在linux和xp下都編譯過去了。 學(xué)到了兩點(diǎn): 1。預(yù)處理。 其實(shí)這個(gè)話題的標(biāo)題有誤,fortran沒有ifdef語句。用預(yù)處理把所有的ifdef語句都會處理掉。這時(shí)的源代碼才需要編譯呢。 2。c和f的混合編程 這個(gè)程序主程序是main.c,它調(diào)用所有的fortran子程序。但是更復(fù)雜一點(diǎn)的是還有幾個(gè)fortran子程序調(diào)用time.c。 在xp下為了簡化編譯,把調(diào)time.c的語句c住了。 處理好這兩點(diǎn),編譯就過去了。 |
| 19 | 1/1 | 返回列表 |
| 最具人氣熱帖推薦 [查看全部] | 作者 | 回/看 | 最后發(fā)表 | |
|---|---|---|---|---|
|
[考研] 0817 化學(xué)工程 299分求調(diào)劑 有科研經(jīng)歷 有二區(qū)文章 +11 | rare12345 2026-03-18 | 11/550 |
|
|---|---|---|---|---|
|
[考研] 287求調(diào)劑 +3 | 晨昏線與星海 2026-03-19 | 4/200 |
|
|
[考研] 085601材料工程專碩求調(diào)劑 +8 | 慕寒mio 2026-03-16 | 8/400 |
|
|
[教師之家] 焦慮 +9 | 水冰月月野兔 2026-03-13 | 13/650 |
|
|
[考研] 0703化學(xué) 305求調(diào)劑 +4 | FY_yy 2026-03-14 | 4/200 |
|
|
[考研] 材料專業(yè)求調(diào)劑 +5 | hanamiko 2026-03-18 | 5/250 |
|
|
[考研] 344求調(diào)劑 +6 | knight344 2026-03-16 | 7/350 |
|
|
[考研] 26調(diào)劑/材料/英一數(shù)二/總分289/已過A區(qū)線 +7 | 步川酷紫123 2026-03-13 | 7/350 |
|
|
[考研] 材料專碩306英一數(shù)二 +10 | z1z2z3879 2026-03-16 | 13/650 |
|
|
[考研] 生物學(xué)071000 329分求調(diào)劑 +3 | 我愛生物生物愛?/a> 2026-03-17 | 3/150 |
|
|
[考研] 268求調(diào)劑 +6 | 簡單點(diǎn)0 2026-03-17 | 6/300 |
|
|
[考研] 278求調(diào)劑 +5 | 煙火先于春 2026-03-17 | 5/250 |
|
|
[考研] 268求調(diào)劑 +7 | 好運(yùn)連綿不絕 2026-03-12 | 8/400 |
|
|
[考研] 211本,11408一志愿中科院277分,曾在中科院自動化所實(shí)習(xí) +6 | Losir 2026-03-12 | 7/350 |
|
|
[考研] 304求調(diào)劑 +5 | 素年祭語 2026-03-15 | 5/250 |
|
|
[考研] 070300化學(xué)學(xué)碩求調(diào)劑 +6 | 太想進(jìn)步了0608 2026-03-16 | 6/300 |
|
|
[考研] 22408總分284求調(diào)劑 +3 | InAspic 2026-03-13 | 3/150 |
|
|
[考研] 294求調(diào)劑 +3 | Zys010410@ 2026-03-13 | 4/200 |
|
|
[考研] 289求調(diào)劑 +3 | 李政瑩 2026-03-12 | 3/150 |
|
|
[考研] 290求調(diào)劑 +3 | ADT 2026-03-13 | 3/150 |
|