对 `libbgp::BgpFsm::tick()' 的未定义引用

Undefined reference to `libbgp::BgpFsm::tick()'

几周前我开始使用 c++,我开始了一个新项目以开始学习更多知识。我遇到了外部依赖性问题。我正在尝试使用一个名为的库: libbgp,我根据他们的文档安装了它。 这是我的代码: https://gist.github.com/amb1s1/9b2c72294da0ec9416810c8686d3adce

错误:

/usr/bin/ld: /tmp/ccsdO32O.o: in function `ticker(libbgp::BgpFsm&)':
ambgp.cpp:(.text+0xa7): undefined reference to `libbgp::BgpFsm::tick()'
collect2: error: ld returned 1 exit status

我不确定在安装 lib 之后我是否还需要做任何其他事情才能在我的源代码中访问该库。

更新

我 运行 它带有 -lbgp 标志,当 运行 它时,我收到以下错误:

g++ -lbgp ambgp.cpp -o ambgp

错误:

./ambgp: error while loading shared libraries: libbgp.so.0: cannot open shared object file: No such file or directory

我的库:

ls -l /usr/local/lib/

-rw-r--r-- 1 root root  10875880 Jan 18 16:56 libbgp.a
-rwxr-xr-x 1 root root       924 Jan 18 16:56 libbgp.la
lrwxrwxrwx 1 root root        15 Jan 18 16:56 libbgp.so -> libbgp.so.0.0.0
lrwxrwxrwx 1 root root        15 Jan 18 16:56 libbgp.so.0 -> libbgp.so.0.0.0
-rwxr-xr-x 1 root root   4291128 Jan 18 16:56 libbgp.so.0.0.0
drwxrwsr-x 3 root staff     4096 Dec 16 19:27 python3.7
回声$LD_LIBRARY_PATH
:/usr/local/lib

在 运行 可执行文件之前,如果它没有存储在 /usr/lib 或 [=13] 等标准位置,则必须告诉它在哪里可以找到 libgdp.so 文件=].以下应该对您有所帮助:

$ export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/usr/local/lib"
$ ./ambgp

如果您不想在每次手动启动 shell 时导出 LD_LIBRARY_PATH,请将该行添加到您的 /home/<user>/.bashrc 文件中。 此外,我认为 -lbgp 标志应该放在编译器命令中的源文件之后 (g++ ambgp.cpp -lbgp -o ambgp)

TL;DR :
ld 声明它找不到 libbgp.so.0,并且您在评论中写道您找到了 libbgp.so 而没有 尾随 .0。因此,创建指向库的符号链接也有帮助:

$ sudo ln -s /usr/local/lib/libbgp.so /usr/local/lib/libbgp.so.0

对于链接,您需要一个没有尾随 .0 的库文件,但对于加载,库名必须有尾随 .0

最后要尝试的是使用 -Wl,-rpath=/usr/local/lib 直接将库位置指定给链接器(正如您已经解决的那样!)