当我在某些计算机上运行Makefile而不是其他计算机时,为什么会出现“未定义的引用”错误?

时间:2013-08-15 17:01:55

标签: c++ papi

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

我正在使用PAPI 5.1.1并且已经知道哪个目录libpapi.apapi.h。我在另一台PC上运行这个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,我已经在做了。

有人有任何其他建议吗?

1 个答案:

答案 0 :(得分:2)

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

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

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

更多信息in this question about linking order