我在Windows下创建的C项目中使用了boost/json。在那里,依赖项是用vcpkg安装的(vcpkg.exe install boost-json)。现在我想把这个项目移植到Ubuntu上。但是我不知道如何在Linux下安装库。也许这对一个C老手来说是显而易见的,但我无法让它工作。我在git项目或官方网站上找不到任何提示。
我已经试过了:
- 使用CMake构建和安装库
- 通过add_library将代码包含在我的CMakeLists.txt中
- 通过仅复制include文件夹将其用作仅头文件夹
在项目中包含这样一个库的最佳实践是什么?实现它的步骤是什么?是否有针对此类任务的教程?我最大的问题是,我不知道谷歌搜索什么。
我希望有人能帮助我,提前谢谢你。
编辑:
根据@vre的建议,我从源代码构建了boost 1.78.0。CMake现在找到了版本为1.78.0的boost版本,并且包含错误消失了。然而,它仍然无法工作,因为Linux下的链接失败了。我得到的输出如下:
/usr/bin/ld: CMakeFiles/Server.dir/main.cpp.o: in function `parse_server_config_json(std::filesystem::__cxx11::path)':
main.cpp:(.text+0x511): undefined reference to `boost::json::parse(boost::basic_string_view<char, std::char_traits<char> >, boost::json::storage_ptr, boost::json::parse_options const&)'
/usr/bin/ld: main.cpp:(.text+0x544): undefined reference to `boost::json::value::~value()'
/usr/bin/ld: main.cpp:(.text+0x589): undefined reference to `boost::json::object::operator[](boost::basic_string_view<char, std::char_traits<char> >)'
/usr/bin/ld: main.cpp:(.text+0x5d0): undefined reference to `boost::json::object::operator[](boost::basic_string_view<char, std::char_traits<char> >)'
/usr/bin/ld: main.cpp:(.text+0x615): undefined reference to `boost::json::object::operator[](boost::basic_string_view<char, std::char_traits<char> >)'
/usr/bin/ld: main.cpp:(.text+0x662): undefined reference to `boost::json::object::operator[](boost::basic_string_view<char, std::char_traits<char> >)'
/usr/bin/ld: main.cpp:(.text+0x6af): undefined reference to `boost::json::object::operator[](boost::basic_string_view<char, std::char_traits<char> >)'
/usr/bin/ld: CMakeFiles/Server.dir/main.cpp.o:main.cpp:(.text+0x758): more undefined references to `boost::json::object::operator[](boost::basic_string_view<char, std::char_traits<char> >)' follow
/usr/bin/ld: CMakeFiles/Server.dir/main.cpp.o: in function `parse_server_config_json(std::filesystem::__cxx11::path)':
main.cpp:(.text+0xb46): undefined reference to `boost::json::object::~object()'
/usr/bin/ld: main.cpp:(.text+0xbb4): undefined reference to `boost::json::value::~value()'
/usr/bin/ld: main.cpp:(.text+0xd4f): undefined reference to `boost::json::object::~object()'
/usr/bin/ld: CMakeFiles/Server.dir/main.cpp.o: in function `boost::json::object::object(boost::json::object const&)':
main.cpp:(.text._ZN5boost4json6objectC2ERKS1_[_ZN5boost4json6objectC5ERKS1_]+0x4a): undefined reference to `boost::json::object::object(boost::json::object const&, boost::json::storage_ptr)'
/usr/bin/ld: CMakeFiles/Server.dir/main.cpp.o: in function `boost::json::value::as_object()':
main.cpp:(.text._ZN5boost4json5value9as_objectEv[_ZN5boost4json5value9as_objectEv]+0x66): undefined reference to `boost::json::detail::throw_invalid_argument(char const*, boost::source_location const&)'
/usr/bin/ld: CMakeFiles/Server.dir/main.cpp.o: in function `boost::json::value::as_array()':
main.cpp:(.text._ZN5boost4json5value8as_arrayEv[_ZN5boost4json5value8as_arrayEv]+0x66): undefined reference to `boost::json::detail::throw_invalid_argument(char const*, boost::source_location const&)'
/usr/bin/ld: CMakeFiles/Server.dir/main.cpp.o: in function `boost::json::value::as_string() const':
main.cpp:(.text._ZNK5boost4json5value9as_stringEv[_ZNK5boost4json5value9as_stringEv]+0x66): undefined reference to `boost::json::detail::throw_invalid_argument(char const*, boost::source_location const&)'
/usr/bin/ld: CMakeFiles/Server.dir/main.cpp.o: in function `boost::json::value::as_int64()':
main.cpp:(.text._ZN5boost4json5value8as_int64Ev[_ZN5boost4json5value8as_int64Ev]+0x66): undefined reference to `boost::json::detail::throw_invalid_argument(char const*, boost::source_location const&)'
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/Server.dir/build.make:102: Server] Error 1
make[1]: *** [CMakeFiles/Makefile2:140: CMakeFiles/Server.dir/all] Error 2
make: *** [Makefile:84: all] Error 2
字符串
我还补充了@GP8提到的:
find_package(
Boost 1.78 REQUIRED
COMPONENTS json
)
型
编辑2:
我忘了连接boost-json。在将以下内容添加到我的CMakeLists.txt后,在Linux下构建成功:
target_link_libraries(${PROJECT_NAME}
Boost::boost
Boost::json
)
型
3条答案
按热度按时间w8rqjzmb1#
你应该首先使用以下命令安装boost:第一个月
要在项目中包含Boost库,必须通过以下方式查找包:
字符串
然后,您可以告诉CMake要使用哪个文件创建可执行文件以及要链接哪些库:
型
j5fpnvbx2#
@GPB概述了一般程序。
如果你的CMake/FindBoost还不支持Boost JSON,最简单的方法就是
字符串
在参与链接二进制文件的1(一)个翻译单元中。
仅见标题
kknvjkwl3#
关于@GPB解决方案的说明:为了使它工作,我需要包括库名称,如下所示:
字符串
没有这个,它就不起作用,至少在我的情况下。