【发布时间】:2016-12-14 13:48:52
【问题描述】:
我有一个听起来很简单的问题,但我觉得我已经尽了一切努力来解决它,但我没有想法。
我有一个我写的程序,它使用 boost/program_options.hpp 使用 include 语句
#include <boost/program_options.hpp>
这个程序可以在我的笔记本电脑上运行,现在我正试图将它放到我没有 sudo 权限的服务器上。在我的笔记本电脑上,我有 1.56 和 1.58 的 boost 版本,在我找到的服务器上,我找到了 1.53.0。我没有安装或构建它。
服务器上存在的共享库文件是: /usr/lib64/libboost_program_options.so.1.53.0
在上面运行 ldd 会给我输出:
ldd /usr/lib64/libboost_program_options.so.1.53.0
linux-vdso.so.1 => (0x00007ffc54a63000)
libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007fc0dcad8000)
libm.so.6 => /lib64/libm.so.6 (0x00007fc0dc7d5000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fc0dc5bf000)
libc.so.6 => /lib64/libc.so.6 (0x00007fc0dc1fe000)
/lib64/ld-linux-x86-64.so.2 (0x00007fc0dd071000)
我认为这意味着它已找到所有依赖项。
我已经创建了一个指向我的主目录的符号链接以创建 libboost_program_options.so 链接,我猜这意味着 -lboost_program_options 链接器标志应该可以工作。
我的编译方式是:
g++ -L/home/homeDir code.cpp -o code.o -std=c++11 -Wall -lboost_program_options
我得到的只是:
fatal error: boost/program_options.hpp: No such file or directory
#include "boost/program_options.hpp"
^
compilation terminated.
我用引号和 试过这个,没有“boost/”等,但我总是得到同样的抱怨。我认为这意味着它找到了库,因为没有关于 -lboost_program_options 标志的投诉?
虽然它可以在我的机器上运行,但我可能根本没有使用共享程序选项库。在我的笔记本电脑上,我的库路径中有一个静态版本的 libboost_program_options,它可能正在使用,还有一个库外部的 program_options.hpp 标头,它可能位于我的包含路径中。我觉得我应该能够使用服务器上的共享库,而不是第 5 次惹恼服务器管理员(这些东西在这里工作得非常缓慢)。
如果这是我的疏忽,我很抱歉。我对 boost 还很陌生,但我觉得我目前已经尝试了一切来解决这个问题。
我会很高兴有任何关于如何改变它的建议......或者如果我只是在使用共享库方面有点愚蠢。
提前致谢。
编辑: 经过更多的研究,我觉得我只是对静态库和共享库感到困惑。我试图在编译时链接一个共享库,我想这没有意义。还包括在编译时不应该链接的东西的头文件没有什么意义。我的代码显然是为静态库设计的。
【问题讨论】:
-
g++ -I/usr/include -L/usr/lib64 -lboost_program_options -std=c++11 ... -
您的服务器可能没有
program_options.hpp,它应该在某个名为 boost_program_options_devel 的包中。 -
是的,这是我的问题。我以为没有它我也能过得去,但事实似乎并非如此。我现在刚刚在我的笔记本电脑上链接到一个静态版本的程序选项,并且正在使用服务器上的可执行文件。到目前为止它正在工作..但我觉得我也应该能够让它在服务器上编译。我现在已经下载了头文件,它决定它找不到 libboost_program_options.so 虽然我已经创建了一个符号链接到我正在运行的同一目录中......有趣 ^^
标签: c++ boost shared-libraries boost-program-options