gpt4 book ai didi

boost - 在 make 文件中包含 boost 库

转载 作者:行者123 更新时间:2023-12-03 00:48:16 25 4
gpt4 key购买 nike

我正在学习 Boost,但我的 make 文件遇到了问题。这是我的基本 makefile:

accesstimer: acctime.o btimer.o
g++ acctime.o btimer.o -o accesstimer

acctime.o: acctime.cpp btimer.h
g++ -c acctime.cpp

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

当 acctime.cpp 中没有 boost 文件系统元素时,此 m,ake 文件工作正常。一旦我添加了 boost 文件系统元素,我显然需要在 make 文件中引用 boost 库,这就是我遇到问题的地方。

以下行适用于单个文件编译:

g++ -I /usr/local/boost/boost_1_39_0 boosttest1.cpp -o bt1 /usr/local/boost/boost_1_39_0/stage/lib/libboost_filesystem-gcc41-mt.a /usr/local/boost/boost_1_39_0/stage/lib/libboost_system-gcc41-mt.a

现在我正在尝试将其集成到 make 文件中。根据我在网上可以找到的信息,我尝试了很多方法,但没有一个有效,这是我最新的:

accesstimer: acctime.o bentimer.o
g++ acctime.o bentimer.o -o accesstimer

acctime.o: acctime.cpp bentimer.h
g++ -c -I /usr/local/boost/boost_1_39_0 acctime.cpp /usr/local/boost/boost_1_39_0/stage/lib/libboost_filesystem-gcc41-mt.a /usr/local/boost/boost_1_39_0/stage/lib/libboost_system-gcc41-mt.a

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

不幸的是,它仍然找不到 Boost 库,有人可以帮忙吗?谢谢

阅读了回答者的建议后,我现在得到了:

accesstimer: acctime.o bentimer.o
g++ -L /usr/local/boost/boost_1_39_0 acctime.o /usr/local/boost/boost_1_39_0/stage/lib/libboost_filesystem-gcc41-mt.a /usr/local/boost/boost_1_39_0/stage/lib/libboost_system-gcc41-mt.a bentimer.o -o accesstimer

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

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

但这仍然无法链接。

这是我收到的错误消息:

g++ -L /usr/local/boost/boost_1_39_0/stage/lib/libboost_filesystem-gcc41-mt.a /usr/local/boost/boost_1_39_0/stage/lib/libboost_system-gcc41-mt.a 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&)]+0x26): undefined reference to `boost::filesystem::detail::status_api(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int&)'
collect2: ld returned 1 exit status
make: *** [accesstimer] Error 1

按照 orsogufo 的建议(谢谢!非常感谢)现在有这个:

accesstimer: acctime.o bentimer.o
g++ -L/usr/local/boost/boost_1_39_0/stage/lib -llibboost_filesystem-gcc41-mt.a -llibboost_system-gcc41-mt.a acctime.o bentimer.o -o accesstimer

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

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

看起来好多了,但仍然找不到库:

g++ -L/usr/local/boost/boost_1_39_0/stage/lib -llibboost_filesystem-gcc41-mt.a -llibboost_system-gcc41-mt.a acctime.o bentimer.o -o accesstimer
/usr/bin/ld: cannot find -llibboost_filesystem-gcc41-mt.a
collect2: ld returned 1 exit status
make: *** [accesstimer] Error 1

我已经仔细检查过该位置,图书馆肯定位于:/usr/local/boost/boost_1_39_0/stage/lib/libboost_filesystem-gcc41-mt.a

仍然不高兴,现在使用这个:

accesstimer: acctime.o bentimer.o
g++ -L/usr/local/boost/boost_1_39_0 -lboost_filesystem-gcc41-mt 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

获取:

g++  -L/usr/local/boost/boost_1_39_0/stage/lib/ -llibboost_filesystem-gcc41-mt acctime.o bentimer.o -o accesstimer
/usr/bin/ld: cannot find -llibboost_filesystem-gcc41-mt
collect2: ld returned 1 exit status
make: *** [accesstimer] Error 1

它正在处理这个:

accesstimer: acctime.o bentimer.o
g++ -L/usr/local/boost/boost_1_39_0/stage/lib -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

感谢您的帮助

最佳答案

当您链接目标文件以创建可执行文件(您的第一个 makefile 规则)时,您必须使用 -L 标志传递 boost 库的位置以及使用-l 标志

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

其中 /usr/local/boost/boost_1_39_0/stage/lib 是包含库的目录,boost_filesystem 是库的文件名,不带开头 lib(根据需要修改这两个)。

您尝试链接的 .a 文件是错误的...该库不应具有扩展名。

关于boost - 在 make 文件中包含 boost 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1305530/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com