[問題] C編譯的問題(pgplot繪圖)莫名其妙解ꠠ…

看板Linux作者 (賴打)時間15年前 (2010/07/20 13:14), 編輯推噓1(102)
留言3則, 2人參與, 最新討論串1/1
是這樣的 我剛學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
#include <cpgplot.h> ?
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
因為是錯在linker階段,其實你第2行不是在做編譯 而是在做
07/20 20:08, 2F

07/20 20:09, , 3F
linking 所以目錄給對他連到正確的lib所以就過了吧
07/20 20:09, 3F
文章代碼(AID): #1CHJ2tpj (Linux)