C編譯的問題(pgplot繪圖) - Linux
By Eden
at 2010-07-20T13:14
at 2010-07-20T13:14
Table of Contents
是這樣的 我剛學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的可執行檔
老實說解決了真的很高興!
但是完全不知道為什麼可以這樣解決!
--
因為我的繪圖軟體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的可執行檔
老實說解決了真的很高興!
但是完全不知道為什麼可以這樣解決!
--
Tags:
Linux
All Comments
By Liam
at 2010-07-23T12:14
at 2010-07-23T12:14
By Yuri
at 2010-07-24T17:34
at 2010-07-24T17:34
By Liam
at 2010-07-28T23:55
at 2010-07-28T23:55
Related Posts
適合ubuntu的專業剪輯軟體
By Lydia
at 2010-07-19T23:46
at 2010-07-19T23:46
Eeepc 1001HA安裝問題
By Charlie
at 2010-07-19T23:26
at 2010-07-19T23:26
kde4 虛擬桌面
By Carol
at 2010-07-19T18:14
at 2010-07-19T18:14
ubuntu 10.04 全螢幕問題
By Harry
at 2010-07-19T16:52
at 2010-07-19T16:52
關於yum安裝的問題
By Valerie
at 2010-07-19T16:43
at 2010-07-19T16:43