は私のMakefileです:Makefileでこのリンクの問題を解決するには?ここ
DIR=..
ARG=$(QUERY_STRING)
MAIN=main
SRC_DIR=$(DIR)/src
BIN_DIR=$(DIR)/bin
INC_DIR=$(DIR)/inc
LIB_DIR=$(DIR)/lib
LIBS=markdown
all: $(MAIN) exec
$(MAIN): $(MAIN).o
$(LD) $^ -L $(LIB_DIR) -l $(LIBS) -o $(BIN_DIR)/[email protected]
$(MAIN).o: $(SRC_DIR)/$(MAIN).c
$(CC) $^ -I $(INC_DIR) -o [email protected]
exec:
$(BIN_DIR)/$(MAIN) $(ARG)
clean:
rm -f *.o core.* $(BIN)/$(MAIN)
明らかに私のプロジェクトの編成方法を定義していますので、私はそれを説明しません。それは何の問題もなくコンパイルんが、バイナリ実行$(BIN_DIR)/$(MAIN)
に次のエラーが表示されます
../bin/main: error while loading shared libraries: rintf: cannot open shared object file: No such file or directory
make: *** [exec] Error 127
rintf
は何のライブラリに属していますか?私は-lc
もリンクしようとしましたが、それでも問題は解決しません。
私のMakefile
に問題がありますか?または、$(MAIN)
に余分なものをリンクする必要がありますか?
ご回答いただきありがとうございます。
+1を。また、 'all:$(MAIN)exec'ルールは賢明ではありません。 Makeは、左から右の順にターゲットの前提条件を構築することを約束していません。より良い: 'all:exec'と' exec:$(MAIN) 'です。 – Beta
@Beta:はい、そうです。個人的には、ビルドされたプログラムを自動的に実行するmakefileは特に好きではありませんが、それは古いかわいそうな考えかもしれません。それは部分的に実行が何をするかに依存します。単体テストや回帰テストは理にかなっています - それはおそらくここにあります。そして、私はオフィスでやった仕事からたくさんの反例を持っています。 –