2014-12-31 44 views
0

我是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中提到这一点?任何帮助将不胜感激。

回答

0

运行程序时运行它这样

export LD_LIBRARY_PATH=/usr/lib/srr__lib 
./executable_file 

或编辑/etc/ld.so.conf并添加行

/usr/lib/srr__lib 

和运行ldconfig为根。

+0

是的,你是对的:)它对我很好,我试过第一个选项 – Sara

+0

'LD_LIBRARY_PATH'是一个临时解决方案。编辑'ld.so.conf'是一个系统范围的解决方案。第三种选择是在构建的二进制文件中使用'rpath'。 –

相关问题