在我提出一个新问题之前,我已经阅读了几个或更多关于此的问题,但我一直在混淆。
我编译我的程序:
g ++ -std = c ++ 11 -Wall -O3 -fopenmp main.cpp -o main -D WITH_COUNTER -I / usr / local / src / pcm -L / usr / local / src / pcm -L / usr / local / LIB
然后,我发现了错误:
main.cpp :(。text.startup + 0x27e):对PCM :: getInstance()的未定义引用
main.cpp :(。text.startup + 0x289):对PCM :: resetPMU()的未定义引用
main.cpp :(。text.startup + 0x310):对PCM :: program的未定义引用(PCM :: ProgramMode,void const *)
那么,任何人都可以向我解释如何解决这个问题吗?
您实际上并没有链接到库本身。
-L
选项告诉链接器将一个目录添加到其搜索路径,但链接器不会遍历其路径中的所有库以查找可能正确的库(可能有数百甚至数千个)。
相反,您需要使用-l
(小写L)选项显式指定要链接的库。
对于一些示例库foo
,将存在名为libfoo.a
或libfoo.so
的文件。要与它链接,请使用-lfoo
。
如果您的库的文档没有告诉您应链接哪个库,请查找合适的命名文件(如上所述)并使用正确的选项链接库。