私はメイクファイルの初心者開発者で、src ディレクトリを含むプロジェクトを持っています。src ディレクトリ内には、次のような .c および .h ファイルがあります: file1.c、file2.c、main.c、header1.h、および header2.c。Main は file2.c に依存し、file2.c は file1.c に依存します。各ファイルは、私が持っている非標準ライブラリと非標準インクルード ディレクトリにもリンクする必要があります。ライブラリ ディレクトリとインクルード ディレクトリは/usr/lib/srr__lib
、/usr/bin/srr__bin
それぞれ と です。src ディレクトリに 1 つ、プロジェクトのルート ディレクトリにもう 1 つ、2 つの makefile を作成しました。src メイクファイルは次のとおりです。
CC = gcc
TARGETDIR_PR=GNU-amd64-Linux
all: $(TARGETDIR_PR)/PR
OBJS_PR = \
$(TARGETDIR_PR)/file1.o \
$(TARGETDIR_PR)/file2.o \
$(TARGETDIR_PR)/main.o
AM_CPPFLAGS = \
-DPACKAGE_LOCALE_DIR=\""$(localedir)"\" \
-DPACKAGE_SRC_DIR=\""$(srcdir)"\" \
-DPACKAGE_DATA_DIR=\""$(pkgdatadir)"\"
AM_CFLAGS =\
-g -I/usr/bin/srr__bin
bin_PROGRAMS = PR
PR_4_SOURCES = \
file1.c \
file2.c \
main.c
PR_LDFLAGS =
PR_LDADD = -L/usr/lib/srr__lib -lsrr__ml__sharedmem_4core -lprdependency -lsrrdsl___wrapper_library__ml -lsrrdynarray -lsrrdynarray_pic -lsrrhistogram -lsrrhistogram_pic -lsrrlistofarrays -lsrrlistofarrays_pic -lsrrmalloc -lsrrparam -lsrrparam_pic -lsrrqueue -lsrrqueue_pic -lvreo_wrapper_library
$(TARGETDIR_PR)/PR: $(TARGETDIR_PR) $(OBJS_PR)
$(LINK.c) $(AM_CFLAGS) $(AM_CPPFLAGS) -o $@ $(OBJS_PR) $(PR_LDADD)
$(TARGETDIR_PR)/SeedVP.o: $(TARGETDIR_PR) SeedVP.c
$(COMPILE.c) $(AM_CFLAGS) $(AM_CPPFLAGS) -o $@ file1.c
$(TARGETDIR_PR)/Task.o: $(TARGETDIR_PR) Task.c
$(COMPILE.c) $(AM_CFLAGS) $(AM_CPPFLAGS) -o $@ file2.c
$(TARGETDIR_PR)/main.o: $(TARGETDIR_PR) main.c
$(COMPILE.c) $(AM_CFLAGS) $(AM_CPPFLAGS) -o $@ main.c
clean:
rm -f \
$(TARGETDIR_PR)/PR \
$(TARGETDIR_PR)/file1.o \
$(TARGETDIR_PR)/file2.o \
$(TARGETDIR_PR)/main.o
rm -f -r $(TARGETDIR_PR)
# Create the target directory (if needed)
$(TARGETDIR_PR):
mkdir -p $(TARGETDIR_PR)
# Enable dependency checking
.KEEP_STATE:
.KEEP_STATE_FILE:.make.state.GNU-amd64-Linux
ルート ディレクトリの makefile は次のとおりです。
SUBDIRS = src
PRDSL_4docdir = ${prefix}/doc/PR
PRdoc_DATA = \
README\
COPYING\
AUTHORS\
ChangeLog\
INSTALL\
NEWS
INTLTOOL_FILES = intltool-extract.in \
intltool-merge.in \
intltool-update.in
EXTRA_DIST = $(PRdoc_DATA) \
$(INTLTOOL_FILES)
DISTCLEANFILES = intltool-extract \
intltool-merge \
intltool-update \
po/.intltool-merge-cache
# Remove doc directory on uninstall
uninstall-local:
-rm -r $(PRdocdir)
すべての autotools コマンドを正常に実行し、./configure を実行してから make を実行すると、プロジェクトは文句を言いませんでした。make でエラーはありませんが、生成された実行可能ファイルを ./PR として実行すると、エラーが発生し、以下のエラーが表示されます。
共有ライブラリの読み込み中にエラーが発生しました: libsrr__ml__sharedmem_4core.so: 共有オブジェクト ファイルを開けません: そのようなファイルまたはディレクトリはありません
ライブラリが64ビットで、私のマシンも64であるため、リンクのエラーだと思います。しかし、メイクファイルでこれをどのように言及できますか? どんな助けでも大歓迎です。