お知らせ

  • 利用規約を守って投稿してください。また、よくある質問および投稿の手引きも参照してください。
  • メッセージの投稿にはアカウントが必要です。未登録の方は、ユーザ登録ページからアカウントを作成することができます。

#1 2011-07-26 14:36:40

katokato
メンバ
登録日: 2010-06-16

Ubuntu10.10 でmakefile作成

構造計算のプログラミングを作成しようとしている、初級者です。
SuperLU4.1というオープンソースコードのソルバーを,人から譲り受けたあるプログラムに実装しようとしていますがいくらやってもundefined reference to ~というエラーメッセージが消えません。

SuperLU3.0 というバージョンのものは他のマシン(32bitでRedhat)では問題なく計算できているようです。私のマシンは64bitで、そのSuperLU3.0 では対応していないようなので、4.1を入れようとしているわけです。
makefileを何度書き直してもうまく修正できず、どこを直せばよいのかわからず相談させて頂きました。
大変恐縮ですがアドバイスを頂ければ幸いです。

PC環境
・CPU インテル(R) Xeon(R) プロセッサー E5640 (12MB L3 キャッシュ、2.66GHz、5.86GT/s、4コア)
・チップセット インテル(R) X58 チップセット
・メモリ 12GB (2GBx6) DDR3 SDRAM メモリ(1333MHz、ECC)
・ディスクシステムの構成 構成1 : SATA No RAID (HDDx1 or HDDx2)構成
・ハードディスク 1TB SATA 3.0Gb/s NCQ HDD (7200回転)

Makefile
=========================================================
TARGET  =  $(HOME)/bin/peak
#
include   $(HOME)/Codes/SuperLU_4.1/make.inc
INCLUDES =  -I/usr/include
HEADER  = $(HOME)/Codes/SuperLU_4.1/SRC
LIBS    = $(HOME)/Codes/SuperLU_4.1/lib/blas_linux.a  $(BLASLIB) -lm -lgfortran
FC      = $(FORTRAN)
FFLAGS  = -O3 -I/usr/include -Wall
LDFLAGS = -L/usr/lib
#
.SUFFIXES: .f90 .f .o
# --------------------------------------
OBJMOD= module.o
OBJ00 = 00main.o flopen.o chksiz.o alocat.o readin.o
OBJ01 = forces.o presss.o ebodyf.o ggrade.o dgsurf.o increm.o
# OBJ02 = assemb.o bmatrx.o prelem.o invers.o resumd.o
OBJ02 = assemb.o bmatrx.o invers.o resumd.o
OBJ03 = eignvl.o vonstr.o
OBJ04 = postpr.o outneu.o minmax.o outvtk.o
OBJHOM= homoge.o
OBJMAT= usrmat.o mm0001.o plast0.o creep0.o ephill.o crhill.o tensor.o
OBJSLV= makcrs.o slusol.o c_fortran_dgssv.o crscgm.o bcgcrs.o
#
OBJALL= $(OBJMOD) $(OBJ00) $(OBJ01) $(OBJ02) $(OBJ03) $(OBJ04) $(OBJ05) $(OBJHOM) $(OBJMAT) $(OBJSLV)
# --------------------------------------
# all: peak
# peak : $(OBJALL)
#     $(FC) $(OBJALL) $(LDFLAGS) -o $(TARGET)
#
all:    $(TARGET)

$(TARGET): $(OBJALL)
    @echo "Linking ..."
    @$(FORTRAN) $(OBJALL) $(LDFLAGS) $(LIBS) -o $(TARGET)
    @echo "'PEAK' make done."
=========================================================

エラーメッセージ
=========================================================
gcc -c -O3 -I/usr/include -Wall module.f90
gcc -c -O3 -I/usr/include -Wall 00main.f90
gcc -c -O3 -I/usr/include -Wall flopen.f90
gcc -c -O3 -I/usr/include -Wall chksiz.f90
chksiz.f90: In function ‘chksiz’:
chksiz.f90:173:0: warning: ‘ngaus’ may be used uninitialized in this function
chksiz.f90:172:0: warning: ‘node’ may be used uninitialized in this function
gcc -c -O3 -I/usr/include -Wall alocat.f90
alocat.f90:15.30:

(途中省略しました)

Warning: Unused dummy argument 'mpid' at (1)
gcc -c -O3 -I/usr/include -Wall slusol.f
gcc -O3 -DAdd_ -I/home/jkato/Codes/SuperLU_4.1/SRC -c c_fortran_dgssv.c
c_fortran_dgssv.c: In function ‘c_fortran_dgssv_’:
c_fortran_dgssv.c:131:15: warning: cast from pointer to integer of different size
c_fortran_dgssv.c:144:14: warning: cast to pointer from integer of different size
c_fortran_dgssv.c:160:14: warning: cast to pointer from integer of different size
gcc -c -O3 -I/usr/include -Wall crscgm.f
gcc -c -O3 -I/usr/include -Wall bcgcrs.f
Linking ...
c_fortran_dgssv.o: In function `c_fortran_dgssv_':
c_fortran_dgssv.c:(.text+0x82): undefined reference to `superlu_free'
c_fortran_dgssv.c:(.text+0x8d): undefined reference to `superlu_free'
c_fortran_dgssv.c:(.text+0x97): undefined reference to `Destroy_SuperNode_Matrix'
c_fortran_dgssv.c:(.text+0xa2): undefined reference to `Destroy_CompCol_Matrix'
c_fortran_dgssv.c:(.text+0xac): undefined reference to `superlu_free'
c_fortran_dgssv.c:(.text+0xb7): undefined reference to `superlu_free'
c_fortran_dgssv.c:(.text+0xbf): undefined reference to `superlu_free'
c_fortran_dgssv.c:(.text+0xf0): undefined reference to `set_default_options'
c_fortran_dgssv.c:(.text+0xfe): undefined reference to `StatInit'
c_fortran_dgssv.c:(.text+0x199): undefined reference to `dCreate_CompCol_Matrix'
c_fortran_dgssv.c:(.text+0x1a5): undefined reference to `superlu_malloc'
c_fortran_dgssv.c:(.text+0x1b7): undefined reference to `superlu_malloc'
c_fortran_dgssv.c:(.text+0x1c7): undefined reference to `intMalloc'
c_fortran_dgssv.c:(.text+0x1eb): undefined reference to `intMalloc'
c_fortran_dgssv.c:(.text+0x20f): undefined reference to `intMalloc'
c_fortran_dgssv.c:(.text+0x24b): undefined reference to `get_perm_c'
c_fortran_dgssv.c:(.text+0x281): undefined reference to `sp_preorder'
c_fortran_dgssv.c:(.text+0x28d): undefined reference to `sp_ienv'
c_fortran_dgssv.c:(.text+0x29f): undefined reference to `sp_ienv'
c_fortran_dgssv.c:(.text+0x31b): undefined reference to `dgstrf'
c_fortran_dgssv.c:(.text+0x3d9): undefined reference to `dQuerySpace'
c_fortran_dgssv.c:(.text+0x44b): undefined reference to `superlu_malloc'
c_fortran_dgssv.c:(.text+0x48c): undefined reference to `superlu_free'
c_fortran_dgssv.c:(.text+0x49a): undefined reference to `Destroy_SuperMatrix_Store'
c_fortran_dgssv.c:(.text+0x4a8): undefined reference to `Destroy_CompCol_Permuted'
c_fortran_dgssv.c:(.text+0x4b6): undefined reference to `StatFree'
c_fortran_dgssv.c:(.text+0x4d0): undefined reference to `StatInit'
c_fortran_dgssv.c:(.text+0x543): undefined reference to `dCreate_Dense_Matrix'
c_fortran_dgssv.c:(.text+0x583): undefined reference to `dgstrs'
c_fortran_dgssv.c:(.text+0x58b): undefined reference to `Destroy_SuperMatrix_Store'
c_fortran_dgssv.c:(.text+0x593): undefined reference to `StatFree'
c_fortran_dgssv.c:(.text+0x627): undefined reference to `superlu_abort_and_exit'
c_fortran_dgssv.c:(.text+0x684): undefined reference to `superlu_abort_and_exit'
c_fortran_dgssv.c:(.text+0x6e1): undefined reference to `superlu_abort_and_exit'
collect2: ld returned 1 exit status
make: *** [/home/jkato/bin/sssolid] Error 1
=========================================================

足らない情報もあるかと思いますがどなたかアドバイスを頂ければ助かります。何卒よろしくお願い致します。

オフライン

 

#2 2011-07-27 00:26:59

vbk
メンバ
From: Lake Hamana in Hamamatsu
登録日: 2009-12-22

Re: Ubuntu10.10 でmakefile作成

katokato による投稿:

私のマシンは64bitで、そのSuperLU3.0 では対応していないようなので、4.1を入れようとしているわけです。

SuperLU4.1の導入がうまくいかないのでしょうか、それとも、4.1を利用したコンパイルができないのでしょうか。
Ubuntuには32bit、64bit版ともにlibsuperlu3-devパッケージがありますが、こちらは試してみましたか?

エラーメッセージによるとlibsuperluを正しくリンクできていないようですが、libsuperlu.aを指定するためのオプションはつけていますか?libsuperlu3-devパッケージをインストールした場合は、-lsuperluオプションを付けることでリンクできます。
詳細は、「man gcc」の「リンカオプション」を参照してみてください。
http://linuxjm.sourceforge.jp/html/GNU_gcc/man1/gcc.1.html

オフライン

 

#3 2011-07-27 14:34:47

katokato
メンバ
登録日: 2010-06-16

Re: Ubuntu10.10 でmakefile作成

vbkさん

アドバイス有難うございました。教えて頂いたとおり、libsuperlu3-devパッケージをインストールして、-lsuperluオプションを追加するとコンパイルできました!まだ、詳しくは見れておりませんが、よさげです。
ただ、libsuperlu3-devは、superLU3.0を基本にしたもののように思えるので、SuperLU4.1との互換性がどこまであるかは実際に使ってみないとわからないかもと思っております。
取り急ぎ、こころより感謝いたします。

また、いつもMakefileでうまくいかず、困っております。Makefikeとかこのあたりを勉強するのに役立つ本、もしくはWebサイトをご存知であれば教えて頂ければありがたいです。

オフライン

 

#4 2011-07-27 21:33:23

vbk
メンバ
From: Lake Hamana in Hamamatsu
登録日: 2009-12-22

Re: Ubuntu10.10 でmakefile作成

自分はMakefile自体を手書きすることはあまりなく、autoconfやautomakeを利用します。

Makefile関連の専門サイトは見つかりませんでしたが、ネット上のサンプルをその都度参照してみてはどうでしょうか。
例えば http://d.hatena.ne.jp/higepon/20080509/1210318472 などはどうでしょうか。

Makefileに限った話ではありませんが、apt-getのsourceコマンドを利用してソフトウェアのソースパッケージをダウンロードして参考にするのもいいかもしれません。

apt-get sourceを利用してhello worldプログラムのソースパッケージを取得する例

コード:

$ apt-get source hello

ソースはカレントディレクトリにダウンロードされます。

オフライン

 

#5 2011-07-28 09:39:10

katokato
メンバ
登録日: 2010-06-16

Re: Ubuntu10.10 でmakefile作成

vbkさん

どうも有難うございました。参考にさせて頂きます。

オフライン

 

Board footer

Powered by FluxBB