C++ 为什么我会得到一个“;未定义的引用”;在某些计算机上运行Makefile时出错,但在其他计算机上不运行?
我正在做一些关于并行处理的研究,需要用不同的并行化API测试计数器输出。每次我尝试编写代码时,都会得到对“PAPI”…的C++ 为什么我会得到一个“;未定义的引用”;在某些计算机上运行Makefile时出错,但在其他计算机上不运行?,c++,papi,C++,Papi,我正在做一些关于并行处理的研究,需要用不同的并行化API测试计数器输出。每次我尝试编写代码时,都会得到对“PAPI”…的未定义引用 我正在使用PAPI 5.1.1,并且已经知道哪些目录libpapi.a和PAPI.h。我在另一台电脑上运行这个Makefile没有问题,但在我需要的另一台电脑上,它似乎不起作用。这是我的 CC=g++ CFLAGS="-fopenmp" LIB=/usr/local/lib/libpapi.a -lm -lpthread INCLUDE=-I/usr/local/i
未定义引用
我正在使用PAPI 5.1.1,并且已经知道哪些目录libpapi.a
和PAPI.h
。我在另一台电脑上运行这个Makefile没有问题,但在我需要的另一台电脑上,它似乎不起作用。这是我的
CC=g++
CFLAGS="-fopenmp"
LIB=/usr/local/lib/libpapi.a -lm -lpthread
INCLUDE=-I/usr/local/include
all: test
echo "Done"
test: testPandP.cpp
${CC} ${CFLAGS} ${LIB} ${INCLUDE} -o test testPandP.cpp
clean:
${RM} *.o test
我读过其他帖子,询问未定义的引用,但我看到的每个帖子都建议使用-L/usr/local/lib
或/usr/local/lib/libpapi.a
,我已经在这么做了
有人有其他建议吗?根据链接器的版本,LIB的顺序可能会给您带来麻烦。这可能就是为什么您可以在某些机器上编译,但在其他机器上却无法编译
更改编译顺序可以做到这一点:
test: testPandP.cpp
${CC} ${CFLAGS} ${INCLUDE} -o test testPandP.cpp ${LIB}
进一步资料