Библиотека G ++ не найдена - PullRequest
       38

Библиотека G ++ не найдена

0 голосов
/ 16 апреля 2020

Я пытаюсь скомпилировать созданную мной программу сравнения TBB и OpenMp. Он прекрасно компилируется с компилятором Visual Studio по умолчанию. Итак, я знаю, что TBB установлен правильно. Тем не менее, я хотел бы использовать вместо G ++. Я создал Makefile, и из того, что я прочитал, необходим флаг -ltbb.

Моя ошибка: "c: / mingw / bin /../ lib / gcc / mingw32 / 9.2.0 /../../../../mingw32/bin/ld.exe: не могу найти -ltbb ".

Я не эксперт, когда нужно убедиться, что все правильно связано и Я все еще пытаюсь учиться.

Это мой текущий Makefile

CPLUSPLUS = g++ 
OPTFLAGS = -O3
TBB_INCLUDE_PATH = C:\tbb-2020.1-win\tbb\include
TBB_LIBRARY_PATH = C:\tbb\tbb\lib\intel64\vc14

all: pps

pps: avl.o main.o parPlaneSweep.o
    $(CPLUSPLUS) -I$(TBB_INCLUDE_PATH) -L$(TBB_LIBRARY_PATH) $(OPTFLAGS) -o $@ $^ -ltbb

avl.o: avl.h avl.c
    $(CC) -c $(OPTFLAGS) -fPIC avl.c

main.o: main.cpp parPlaneSweep.h
    $(CPLUSPLUS) -c $(OPTFLAGS) -fopenmp main.cpp 

parPlaneSweep.o: parPlaneSweep.h parPlaneSweep.cpp
    $(CPLUSPLUS) -c $(OPTFLAGS)  -fPIC -fopenmp parPlaneSweep.cpp

clean:
    rm *.o
    rm pps

enter image description here

enter image description here

1 Ответ

1 голос
/ 17 апреля 2020

Пожалуйста, обновите ваш вопрос, вместо того, чтобы указывать людям на другие сайты.

Во-первых, вы никогда не должны использовать обратную косую черту в make-файлах, даже на Windows (есть исключения из этого на Windows, но они очень редко). Всегда используйте прямую косую черту в качестве разделителей каталогов.

Во-вторых, вы определяете переменные TBB_INCLUDE_PATH и TBB_LIBRARY_PATH, но затем никогда не используете их. Просто упоминание name переменной не использует переменную. Вы должны включить его в $(...), чтобы использовать его, как $(TBB_INCLUDE_PATH).

Наконец, все общие линкеры являются однопроходными линкерами, что означает порядок , в который вы помещаете Библиотеки и объектные файлы в строке ссылок критически важны. Вы всегда должны помещать объектные файлы first , а библиотеки last . Если у вас есть несколько библиотек, порядок их появления также может быть важен. Ваша строка ссылки должна выглядеть примерно так:

pps: avl.o main.o parPlaneSweep.o
        $(CPLUSPLUS) -I$(TBB_INCLUDE_PATH) -L$(TBB_LIBRARY_PATH) $(OPTFLAGS) -o $@ $^ -ltbb

Если вы хотите узнать, что означают $@ и $^, вы можете прочитать о automati c переменных .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...