2

我正在对并行处理进行一些研究,需要使用不同的并行化 API 测试计数器输出。每次我尝试编写代码时,我都会得到undefined reference to 'PAPI_....

我正在使用 PAPI 5.1.1 并且已经知道哪些目录libpapi.a在其中papi.h。我在另一台 PC 上运行此 Makefile 没有问题,但在我需要的另一台 PC 上,它似乎无法正常工作。这就是我所拥有的

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/libor /usr/local/lib/libpapi.a,我已经在这样做了。

有人有其他建议吗?

4

1 回答 1

2

根据链接器的版本,库的顺序可能会给您带来麻烦。这可能就是为什么您可以在某些机器上编译但不能在其他机器上编译的原因。

更改编译顺序应该这样做:

test: testPandP.cpp
     ${CC} ${CFLAGS} ${INCLUDE} -o test testPandP.cpp ${LIB}

此问题中有关链接顺序的更多信息。

于 2014-02-06T16:24:48.387 回答