我正在尝试编译我制作的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
请更新您的问题,而不是在其他网站上指责他人。
首先,即使在Windows上,也绝不能在makefile中使用反斜杠(Windows上有例外,但这种情况很少见)。始终使用正斜杠作为目录分隔符。
第二,您定义了变量TBB_INCLUDE_PATH
和TBB_LIBRARY_PATH
,但是您从不使用它们。仅提及变量的name并不使用该变量。您必须将其包含在$(...)
中才能使用,例如$(TBB_INCLUDE_PATH)
。
最后,所有公共链接器都是单遍链接器,这意味着将库和目标文件放在链接线上的order非常重要。您应该始终将目标文件first和库文件[[last放进去。如果您有多个库,则它们出现的顺序也很重要。您的链接行应如下所示:
pps: avl.o main.o parPlaneSweep.o
$(CPLUSPLUS) -I$(TBB_INCLUDE_PATH) -L$(TBB_LIBRARY_PATH) $(OPTFLAGS) -o $@ $^ -ltbb
如果您想了解$@
和$^
的含义,则可以阅读有关automatic variables的信息。