HWLOC连接错误

Linking error with HWLOC

本文关键字:错误 连接 HWLOC      更新时间:2023-10-16

我试图链接hwloc (http://www.open-mpi.org/projects/hwloc/)到我的非常基本的应用程序。详情如下

main.cxx:

 #include <hwloc.h>
 #include <stdio.h>
 int main(int argc, char** argv) {
     hwloc_topology_t topology;
     int ncores;
     hwloc_topology_init(&topology);
     hwloc_topology_load(topology);
     ncores = hwloc_get_nbobjs_by_type(topology, HWLOC_OBJ_CORE);
     printf("Number of cores: %dn", ncores);
     hwloc_topology_destroy(topology);
     return 0;
 }

Makefile:

 .SUFFIXES: .cxx .o
 CXX  = g++
 TARGET  = tests
 SRCS    = main.cxx
 OBJS   = $(SRCS:.cxx=.o)
 HWLOC_ROOT = $(CURDIR)/hwloc
 HWLOC_INCS = -I$(HWLOC_ROOT)/include
 HWLOC_LIBS = -L$(HWLOC_ROOT)/lib -lhwloc
 FLAGS   = -std=c++0x $(HWLOC_INCS)
 LDFLAGS = $(HWLOC_LIBS)
 %.o : %.cxx
    $(CXX) -c $(FLAGS) $<
 $(TARGET) : $(OBJS)
    $(CXX) -o $@ $^ $(LDFLAGS) -lstdc++
 clean :
    rm -rf *.o $(TARGET)

与我的两个文件(main。cxx和Makefile)是包含hwloc的目录。它是正确安装的,因为我以前用过它。

我可以编译一切。当我运行./tests时,我得到以下错误:

 ./tests: error while loading shared libraries: libhwloc.so.5: cannot open shared object file: No such file or directory

里面。/hwloc:

 bin/  include/  lib/  share/

里面。/hwloc/lib:

 libhwloc.la  libhwloc.so  libhwloc.so.5  libhwloc.so.5.3.1  pkgconfig/

很明显libhwloc.so.5存在,所以我不确定问题是什么。谢谢你对我问题的帮助。

编辑:

澄清一下,重点是不必将目录添加到我的路径中。我不想为了让链接器知道在哪里找到libhwloc.so.5而执行任何命令行命令。目标是能够将我的应用程序的根目录移动到我的计算机或另一台计算机上的任何地方,并且它仍然知道在哪里找到libhwloco .so。5、自打包应用程序

这就是LD_LIBRARY_PATH的目的。如果您在非标准位置(即不是/usr/lib、/usr/local/lib等)有共享库,动态加载器需要知道在哪里找到它们。有两种主要的方法来解决这个问题。对于不经常使用的一次性库或少量程序,将users LD_LIBRARY_PATH设置为包含库所在的目录就足够了。为了更广泛的使用,您可以通过将该目录添加到加载器知道的目录列表中,从而使该目录成为"标准"目录之一—在Linux上,通常是通过编辑/etc/ld.so.conf.d/etc/ld.so.conf本身中的文件,然后运行ldconfig来完成的。这会将该目录添加到所有用户和程序的系统范围搜索路径中,因此要小心潜在的冲突。

您可以在编译时使用-Wl,-rpath,$(HWLOC_ROOT)/lib强制执行库的运行时路径(这意味着gcc将传递"-rpath $(HWLOC_ROOT)/lib"给链接器),但这并不总是一个好主意。