我是makefile的初级开发人员,并且有一个包含src目录的项目。在src目录下有一些.c和.h文件,如下所示: file1.c,file2.c,main.c,header1.h和header2.c。 Main取决于file2.c,而file2.c取决于file1.c。每个文件都应该链接到我拥有的非标准库和一个非标准的include目录。库目录和包含目录分别为/usr/lib/srr__lib
和/usr/bin/srr__bin
。我在src目录下写了两个makefile,另一个在项目的根目录下写入。在src生成文件如下图所示:如何将项目链接到makefile中的64位库
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 [email protected] $(OBJS_PR) $(PR_LDADD)
$(TARGETDIR_PR)/SeedVP.o: $(TARGETDIR_PR) SeedVP.c
$(COMPILE.c) $(AM_CFLAGS) $(AM_CPPFLAGS) -o [email protected] file1.c
$(TARGETDIR_PR)/Task.o: $(TARGETDIR_PR) Task.c
$(COMPILE.c) $(AM_CFLAGS) $(AM_CPPFLAGS) -o [email protected] file2.c
$(TARGETDIR_PR)/main.o: $(TARGETDIR_PR) main.c
$(COMPILE.c) $(AM_CFLAGS) $(AM_CPPFLAGS) -o [email protected] 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
并且被如下所示的根目录的生成文件:
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)
我运行所有的自动工具成功地指挥然后./configure的使和项目没有抱怨;没有错误的化妆,但是当我运行生成的可执行文件./PR它抱怨,给了以下错误:
错误而载入共享库:libsrr__ml__sharedmem_4core.so: 无法打开共享对象文件:没有文件或目录
我想这可能是一个连接错误,因为库是64位,我的机器也是64。但是,我如何在makefile中提到这一点?任何帮助将不胜感激。
是的,你是对的:)它对我很好,我试过第一个选项 – Sara
'LD_LIBRARY_PATH'是一个临时解决方案。编辑'ld.so.conf'是一个系统范围的解决方案。第三种选择是在构建的二进制文件中使用'rpath'。 –