私はAIXでpro * cを使用しています。.pc
ファイルを.so libaryにコンパイルします。そしてリンクしてください。これは私のディレクトリです:.pcと.cを同時にコンパイルすると、makefileが理由なく終了します。非常に奇妙な
LS connect.pc func.c get_log.pc main.cのメイクsql_err.pc
は、これが私のメイクです:
#Makefile
CC = cc -g -brtl
CFLAGS = -g -c
ESQL = proc
RM = rm -f
MYHOME = /home/xxx
OBJ = main.o func.o
LIBOBJ = get_log.o connect.o sql_err.o
DBINC = -I$(ORACLE_HOME)/precomp/public
DBLIB = -L$(ORACLE_HOME)/lib -lclntsh
INCLUDE = -I$(MYHOME)/include
.SUFFIXES: .pc .c .o
.pc.o:
$(ESQL) include=$(MYHOME)/include iname=$*.pc
$(CC) -o $*.o $(CFLAGS) $*.c $(INCLUDE) $(DBINC) $(DBLIB)
$(RM) $*.c
$(RM) $*.lis
libmydb.so:$(LIBOBJ)
$(CC) -qmkshrobj -o [email protected] $(LIBOBJ) $(DBLIB)
mv [email protected] $(MYHOME)/lib
query:$(OBJ)
cc -o [email protected] $(OBJ) -L$(MYHOME)/lib -lmydb
mv [email protected] $(MYHOME)/bin
func.o:func.c
$(CC) -c $(CFLAGS) $< $(INCLUDE)
main.o:main.c
$(CC) -c $(CFLAGS) $< $(INCLUDE)
clean:
rm -f *.o *.lis
私は私を作りますこれを得る:
.......
cc -g -brtl -o sql_err.o -g -c sql_err.c -I/home/xxx/include -I/oracle/product/10.2.0/precomp/public -L/oracle/product/10.2.0/lib -lclntsh
rm -f sql_err.c
rm -f sql_err.lis
cc -g -brtl -qmkshrobj -o libmydb.so get_log.o connect.o sql_err.o -L/oracle/product/10.2.0/lib -lclntsh
mv libmydb.so /home/xxxlib
libmydb.so
完了したときに間違ったメッセージが出る!!! 。なぜ??また.o
にコンパイルするには私の.c
が必要で、最後に実行可能ファイルのクエリリンクlibmydb.so
が必要です。私が変更されたときに は、このようなsqueuceは.pc.o
前.c.o
を置く:
prepaid(wmfe)/home/xxx/src>make
cc -g -brtl -c -g -c main.c -I/home/xxx/include
cc -g -brtl -c -g -c func.c -I/home/xxx/include
cc -o query main.o func.o -L/home/xxx/lib -lmydb
ld: 0706-006 Cannot find or open library file: -l mydb
ld:open(): A file or directory in the path name does not exist.
make: 1254-004 The error code from the last command is 255.
Stop.
が、私はこれを扱うことができない、非常に奇妙な:私はlibmydb.so最後のステップを持っているが
query:$(OBJ)
cc -o [email protected] $(OBJ) -L$(MYHOME)/lib -lmydb
mv [email protected] $(MYHOME)/bin
func.o:func.c
$(CC) -c $(CFLAGS) $< $(INCLUDE)
main.o:main.c
$(CC) -c $(CFLAGS) $< $(INCLUDE)
.pc.o:
$(ESQL) include=$(MYHOME)/include iname=$*.pc
$(CC) -o $*.o $(CFLAGS) $*.c $(INCLUDE) $(DBINC) $(DBLIB)
$(RM) $*.c
$(RM) $*.lis
libmydb.so:$(LIBOBJ)
$(CC) -qmkshrobj -o [email protected] $(LIBOBJ) $(DBLIB)
mv [email protected] $(MYHOME)/lib
それは、このメッセージを与えます、助けて!!
ありがとうございました!それは、私はそれを後で試してみましょう!ありがとうございました! – Hhdzhu
こんにちは、私は、2回目のリンクが失敗した理由を尋ねるかもしれません。初めてlibmydb.soを取得しました。 – Hhdzhu
@Hhdzhuリンカーが動的なものではなく静的なライブラリーだけを探すかもしれないので、リンクするステップに '-brtl'が必要かもしれないと思います。しかし、AIXの専門家ではない。 http://fixunix.com/aix/493298-linking-so-aix-4-3-a.html投稿#4に記載されているもの –