[問題] C編譯的問題(pgplot繪圖)莫名其妙解ꠠ…
是這樣的 我剛學linux不到一個月
因為我的繪圖軟體pgplot 他是屬於fortran的編譯軟體
但是要寫下程式碼時 主要他是接受fortran的編碼
但是老師希望我用C語言來試試看,我查過確實pgplot也可以用C寫
只是要再經過另一種編譯法來變成可執行檔
我在自己家目錄下的自己的資料夾中有用fortran寫下程式碼
用gfortran編譯(檔名為pgdemo1.f)
gfortran pgdemo1.f -L/usr/local/share/pgplot -lpgplot -L/usr/X11R6/lib -lX11
-lpng -lz
可以跑出可執行檔沒問題!但是是fortran的語法寫的程式
於是我試著用C寫完以後 用GCC來編譯
先打下gcc -c c-example.c 以後
會產生一個 c-example.o的檔案
可是 之後我打下
gfortran -o 123 c-example.o -lcpgplot -lpgplot -lX11 -lgcc -lm
/usr/local/lib/libpgplot.so: undefined reference to `png_set_PLTE'
/usr/local/lib/libpgplot.so: undefined reference to `png_init_io'
/usr/local/lib/libpgplot.so: undefined reference to `png_set_text'
/usr/local/lib/libpgplot.so: undefined reference to `png_set_tRNS'
/usr/local/lib/libpgplot.so: undefined reference to `png_create_info_struct'
/usr/local/lib/libpgplot.so: undefined reference to `png_write_info'
/usr/local/lib/libpgplot.so: undefined reference to `png_create_write_struct'
/usr/local/lib/libpgplot.so: undefined reference to `png_set_IHDR'
/usr/local/lib/libpgplot.so: undefined reference to `png_write_end'
/usr/local/lib/libpgplot.so: undefined reference to `png_write_row'
/usr/local/lib/libpgplot.so: undefined reference to
`png_destroy_write_struct'
我查過GOOGLE 與鳥哥的資料
我在猜是有幾個可能
1.
是不是我環境變數沒設定好?
在當前的環境下 .cshrc中 內容為
setenv PGPLOT_DIR '/usr/local/pgplot/'
setenv LD_LIBRARY_PATH /usr/local/pgplot
2.
在這套軟體的官方網站中 有說一名個叫cpgplot.h的檔案
我在想是不是我的編譯過程沒有連過去這個cpgplot.h的檔案
造成在編譯的過程中,電腦不了解我一些定義!
懇請高手指點一下問題在哪邊 十萬分感謝!
解決方法:
指令
假設是要編譯在當前目錄中pgplot_graph.c檔案
打下
gcc -Wall -O2 -c -I/usr/local/pgplot pgplot_graph.c
之後
gfortran -o pgplot_graph pgplot_graph.o -L/usr/local/pgplot/ -lcpgplot
-lpgplot -lpng -lz -L/usr/X11R6/lib -lX11 -lm -lc
即可在當前目錄下產生名為pgplot_graph的可執行檔
老實說解決了真的很高興!
但是完全不知道為什麼可以這樣解決!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.122.193.112
→
07/20 13:59, , 1F
07/20 13:59, 1F
※ 編輯: danny6430 來自: 140.122.193.112 (07/20 16:06)
※ 編輯: danny6430 來自: 140.122.193.112 (07/20 16:30)
推
07/20 20:08, , 2F
07/20 20:08, 2F
→
07/20 20:09, , 3F
07/20 20:09, 3F