如何将项目链接到 Makefile 中的 64 位库



我是makefile的初学者,有一个包含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。 我写了两个makefile,一个在src目录,另一个在项目的根目录。 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

根目录的制作文件如下所示:

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没有错误,但是当我将生成的可执行文件作为 ./PR 运行时,它会抱怨并给出以下错误:

加载共享库时出错:libsrr__ml__sharedmem_4core.so: 无法打开共享对象文件:没有此类文件或目录

我认为这可能是链接中的错误,因为库是 64 位的,我的机器也是 64 位的。但是,我如何在制作文件中提及这一点?任何帮助将不胜感激。

运行程序时,以这种方式运行它

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

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

/usr/lib/srr__lib

并以根用户身份运行ldconfig

相关内容

  • 没有找到相关文章

最新更新