Я столкнулся странные проблемы в следующем Makefile:Библиотеки, влияющие на другие библиотеки в Makefile
# Mosek path
MOSEKPATH = /autofs/fs1.ece/fs1.eecg.najm/b/b1/power_grid_code/mosek
# Include paths
INCPATHS = -I$(MOSEKPATH)/7/tools/platform/linux64x86/h -I/usr/include/suitesparse -I../include
# Libraries paths
LIBPATHS = -L$(MOSEKPATH)/7/tools/platform/linux64x86/bin
# Link libraries
LIBS = -lboost_timer-mt -lboost_system -lumfpack -lamd -lcolamd -lcholmod -lccolamd -lcamd -lbtf -lcsparse -lcxsparse -lklu -lldl -lspqr -llapack -lblas
MOSEKLIB = -lmosek64
LDOPT = -Wl,-rpath-link,$(MOSEKPATH)/7/tools/platform/linux64x86/bin -Wl,-rpath,'/autofs/fs1.ece/fs1.eecg.najm/b/b1/power_grid_code/mosek/7/tools/platform/linux64x86/bin' -pthread -lc -lm
# Specify compiler
CC = g++-4.7 -m64
# Compiler flags
FLAGS = -O3 -Wall -g
lo1: lo1.c
$(CC) $(FLAGS) -c $(INCPATHS) -o lo1.o lo1.c
$(CC) $(FLAGS) $(LIBPATHS) lo1.o $(LIBS) $(MOSEKLIB) $(LDOPT) -o lo1
clean:
rm -f lo1 *.o
Я получил большую часть контента из примеров, приведенных MOSEK. Файл Makefile отлично работает, и результаты ожидаются. Проблема в том, что версия MOSEK, которую я использую, имеет многопоточность (MOSEK 7.1). MOSEK должен определить количество ядер на машине и использовать их все. Когда я использую Makefile как есть, MOSEK только обнаруживает одно ядро, и использует только одну нить:
Computer
Platform : Linux/64-X86
Cores : 1
Однако, когда я компилируется без $ (ЛИЭС), MOSEK делает обнаружение 4 ядра:
Computer
Platform : Linux/64-X86
Cores : 4
Код, который у меня есть в lo1.c, теперь не использует $ (LIBS), но мне понадобятся эти библиотеки позже, в lo1.c. Почему эти библиотеки влияют на поведение MOSEK?
спасибо.
Вы пытались выяснить, какая * библиотека вызывает это? (Двоичный поиск по списку и т. Д.) –
@EtanReisner Кажется, проблема связана с umfpack и библиотеками, которые приходят после него, но не в какой-либо конкретной. Мне пришлось удалить все, чтобы он работал. Даже разрешение «$ (LIBS) = -umfpack» только не сработало. –
Так что, используя boost, хорошо, но с помощью любой из библиотек от umfpack до конца (даже по одному) это нарушает? Или это только umfpack? –