Я пытаюсь связать hwloc (http://www.open-mpi.org/projects/hwloc/) с моим самым простым приложением. Ниже приведены подробные сведенияОшибка связи с 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;
}
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 [email protected] $^ $(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
существует поэтому я не уверен, в чем проблема. Я ценю любую помощь по моей проблеме.
Edit:
Чтобы уточнить, дело в том, чтобы не иметь, чтобы добавить каталог в моем пути. Я не хочу выполнять какие-либо команды в командной строке, чтобы компоновщик знал, где найти libhwloc.so.5. Цель состоит в том, чтобы иметь возможность перемещать корневую директорию моего приложения в любом месте на моем компьютере или другом компьютере, и он все еще знает, где найти libhwloc.so.5, так как он упакован вместе с приложением.
Либо добавьте './Hwloc/lib' в переменную пути в пользовательскую среду, либо переместите' libhwloc.so.5' в каталог, уже находящийся в пути (или добавьте ссылку на него). –
@CaptainObvlious Я знаю, что это простое решение, но в то же время я должен иметь возможность заставить его работать, не добавляя его на мой путь. Раньше я использовал hwloc в своем каталоге приложений (по соображениям переносимости) и не имел проблем с привязкой. Конечно, я не помню/не имею доступа к тому, что я делал раньше, иначе я бы не был здесь;) –