无法链接makefile中的boost.system

时间:2009-08-20 15:18:49

标签: boost makefile linker

刚刚问了一个关于在make文件中链接Boost库的问题。 感谢那些帮助过的人。我最终得到了这个:

accesstimer: acctime.o bentimer.o
    g++ -L/usr/local/boost/boost_1_39_0/stage/lib -lboost_system -lboost_filesystem   acctime.o bentimer.o -o accesstimer   

acctime.o: acctime.cpp bentimer.h
    g++ -I /usr/local/boost/boost_1_39_0 -c acctime.cpp 

bentimer.o: bentimer.cpp bentimer.h
    g++ -c bentimer.cpp 

我现在的问题是boost.filesystem需要boost.system,上面的make文件找不到boost.system。

通过查看stage / lib目录并删除文件名的lib和尾部(libboost_filesystem-gcc41-mt.a),我获得了boost.filesystem的名称。正如您在上面所看到的,我对libboost_system-gcc41-mt.a做了同样的事情,并提出了boost_system但是找不到它。

有谁知道如何链接boost.system?

感谢Uncle zeive,这是有效的,但是当我尝试使用其中一个文件系统关键字(例如存在)时,我得到了这个:

g++ -I /usr/local/boost/boost_1_39_0 -c acctime.cpp
In file included from acctime.cpp:5:
bentimer.h:2:19: warning: extra tokens at end of #ifndef directive
bentimer.h:11:18: warning: extra tokens at end of #ifdef directive
bentimer.h:28:3: warning: no newline at end of file
g++ -L/usr/local/boost/boost_1_39_0/stage/lib -lboost_system-gcc41-mt -lboost_filesystem   acctime.o bentimer.o -o accesstimer
acctime.o: In function `boost::enable_if<boost::filesystem::is_basic_path<boost::filesystem::basic_path<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::filesystem::path_traits> >, bool>::type boost::filesystem::exists<boost::filesystem::basic_path<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::filesystem::path_traits> >(boost::filesystem::basic_path<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::filesystem::path_traits> const&)':
acctime.cpp:(.text._ZN5boost10filesystem6existsINS0_10basic_pathISsNS0_11path_traitsEEEEENS_9enable_ifINS0_13is_basic_pathIT_EEbE4typeERKS7_[boost::enable_if<boost::filesystem::is_basic_path<boost::filesystem::basic_path<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::filesystem::path_traits> >, bool>::type boost::filesystem::exists<boost::filesystem::basic_path<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::filesystem::path_traits> >(boost::filesystem::basic_path<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::filesystem::path_traits> const&)]+0x35): undefined reference to `boost::filesystem::detail::status_api(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, boost::system::error_code&)'
collect2: ld returned 1 exit status
make: *** [accesstimer] Error 1

你知道我在这里做错了吗?

现在我已经将-I boost root链接添加到它构建的第一个链接命令:

accesstimer: acctime.o bentimer.o
    g++ -L/usr/local/boost/boost_1_39_0/stage/lib -lboost_system-gcc41-mt -lboost_filesystem-gcc41-mt  -I /usr/local/boost/boost_1_39_0 acctime.o bentimer.o -o accesstimer     

acctime.o: acctime.cpp bentimer.h
    g++ -I /usr/local/boost/boost_1_39_0 -c acctime.cpp 

bentimer.o: bentimer.cpp bentimer.h
    g++ -c bentimer.cpp 

但是当我执行时,我得到:

./accesstimer: error while loading shared libraries: libboost_system-gcc41-mt-1_39.so.1.39.0: cannot open shared object file: No such file or directory

该档案存在,但没有提起。

2 个答案:

答案 0 :(得分:4)

实际上你不应该删除整个尾随部分,只删除扩展名:

-lboost_system-gcc41-mt

对于boost_filesystem也是如此:

-lboost_filesystem-gcc41-mt

答案 1 :(得分:1)

答案对我来说,希望它能帮助别人如下: 我遇到连接问题,这里的好人让我把正确的东西放在我的make文件中,但我还是得到了:

./accesstimer: error while loading shared libraries: libboost_system-gcc41-mt-1_39.so.1.39.0: cannot open shared object file: No such file or directory

解决方案是执行:

ldconfig

在我的Linux机器上,我刚刚安装了Boost并构建了filesytem库。 我正在分析,因为需要为我的系统运行ldconfig以获取我安装的新库。它现在有效。