【发布时间】:2013-06-14 15:50:00
【问题描述】:
我正在尝试将 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: %d\n", ncores);
hwloc_topology_destroy(topology);
return 0;
}
生成文件:
.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 的位置而必须执行任何命令行命令。目标是能够将我的应用程序的根目录移动到我的计算机或另一台计算机上的任何位置,并且它仍然知道 libhwloc.so.5 的位置,因为它与应用程序一起打包。
【问题讨论】:
-
要么将
./hwloc/lib添加到用户环境中的路径变量中,要么将libhwloc.so.5移动到路径中已经存在的目录中(或添加指向它的链接)。 -
@CaptainObvlious 我知道这是一个简单的解决方案,但同时我应该能够在不将其添加到我的路径的情况下使其工作。过去,我在我的应用程序目录中使用了 hwloc(出于可移植性的原因)并且链接没有问题。当然,我不记得/无法访问我之前所做的事情,否则我不会在这里;)
标签: c++ linker makefile runtime-error