对 `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

解决方法

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

$ 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 直接指定链接器的库位置(正如您已经解决的那样!)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...