对 `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
直接将库位置指定给链接器(正如您已经解决的那样!)
几周前我开始使用 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
直接将库位置指定给链接器(正如您已经解决的那样!)