链接到共享助推库令人头痛
我有一个问题,听起来令人讨厌的简单,但我觉得我已经尝试了一切来解决它,我出来的想法。链接到共享助推库令人头痛
我有一个程序,我写使用包括声明其采用升压/ program_options.hpp
#include <boost/program_options.hpp>
该程序适用于我的笔记本电脑,现在我试图把它放到哪里我不知道一个服务器有sudo特权。在我的笔记本电脑上,整个工作的地方,我有升级版本1.56和1.58,在服务器上我发现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.
我已经与报价和<>想这一点,并没有 “升压/” 等,但我总是得到同样的投诉。我认为这意味着它找到了库,因为没有关于-lboost_program_options标志的投诉?
虽然它适用于我的机器,但我可能根本没有使用共享程序选项库。在我的笔记本电脑上,我的库路径中可能使用了libboost_program_options的静态版本,以及可能位于我的include路径中的库外的program_options.hpp头。我觉得我应该能够使用服务器上的共享库,而不是惹恼第五次服务器管理员(事情在这里真的很慢)。
对不起,如果这是我的疏忽。我很兴奋,但我觉得现在我已经尝试了一切来解决这个问题。
我很乐意提供任何有关如何改变这种情况的建议......或者如果我只是在使用共享库时感到有点愚蠢。
在此先感谢。
编辑: 经过更多的研究,我觉得我只是在静态和共享库之间感到困惑。我试图在编译时链接一个共享库,我认为这没有意义。还包括在编译时不应该链接的东西的头文件没有什么意义。我的代码显然是为静态库设计的。
错误消息是由预编译器生成的,它没有找到Boost头文件(如错误消息中所述)。您需要设置找到Boost库头文件的正确包含路径(-I...
),显然它们不在/usr/include
之下。
必须相应地指定Boost库(-L...
)的路径。
最后:如果您正在链接系统上的Boost共享库,那么您应该使用与服务器上安装的Boost相同版本的Boost。否则,请与静态库链接,这可能会使您的可执行文件变大,但它可以在任何服务器上运行,而不管在那里安装了何种Boost版本(甚至没有)。
因此要澄清,要使用boost程序选项我需要头文件和共享库对象?我认为共享库对象可能包含头文件和我想调用的函数的代码。我之前没有清楚地使用共享库... 我正在重新编译时切换到服务器,但它可能是一个好主意,只是链接到我的系统上的静态库并使用服务器上的可执行文件。这可能会节省很多痛苦。 – LuckyM
谢谢,我只是下载头文件,现在我有一个错误,我可以更好地工作。无法找到-lboost_program_options。奇怪要对一个错误感到高兴。但至少我在网上某个地方见过这个。 – LuckyM
要进行编译,您需要头文件和共享库。要运行该程序,您只需要共享库。实际上,如果需要共享库中的真正符号,则只需要共享库,但Boost库中的许多内容仅在头文件中,因此直接编译到您的可执行文件中。 – Rene
'g ++ -I/usr/include -L/usr/lib64 -lboost_program_options -std = C++ 11 ...' –
您的服务器可能没有'program_options.hpp',它应该在一些名为boost_program_options _ ** devel **的软件包。 – Mine
是的,那是我的问题。我想我可以没有它,但似乎并非如此。我现在只是在我的笔记本电脑上链接了一个静态版本的程序选项,并使用服务器上的可执行文件。它工作到目前为止..但我觉得我应该能够得到这个在服务器上编译以及。我现在已经下载了头文件,它决定它找不到libboost_program_options.so,尽管我已经创建了一个符号链接到我正在运行的同一个目录中...好玩^^ – LuckyM