【Can‘t build test suite in cmake project with Boost.Test on Apple Silicon】

在AppleSilicon上遵循JetBrains的CMake教程构建cmake_testapp时,遇到链接错误,错误涉及boost库的x86_64和arm64架构不匹配问题。错误信息显示在尝试将macOS-x86_64的文件与macOS-arm64文件链接。解决方案可能包括确保所有依赖项都为正确的架构或修改CMakeLists.txt配置以适应新平台。
摘要由CSDN通过智能技术生成

按照JetBrains's tutorial教程在Apple Silicon上构建cmake_testapp

使用brew install boost,版本号为1.81
该教程为:Quick CMake Tutorial

报错信息

tests.app在build过程中返回如下错误

ld: warning: ignoring file /opt/homebrew/lib/libboost_unit_test_framework-mt.dylib, building for macOS-x86_64 but attempting to link with file built for macOS-arm64
Undefined symbols for architecture x86_64:
  "boost::test_tools::tt_detail::report_assertion(boost::test_tools::assertion_result const&, boost::unit_test::lazy_ostream const&, boost::unit_test::basic_cstring<char const>, unsigned long, boost::test_tools::tt_detail::tool_level, boost::test_tools::tt_detail::check_type, unsigned long, ...)", referenced from:
      bool boost::test_tools::tt_detail::check_frwd<boost::test_tools::tt_detail::equal_impl_frwd, int, int>(boost::test_tools::tt_detail::equal_impl_frwd, boost::unit_test::lazy_ostream const&, boost::unit_test::basic_cstring<char const>, unsigned long, boost::test_tools::tt_detail::tool_level, boost::test_tools::tt_detail::check_type, int const&, char const*, int const&, char const*) in tests.cpp.o
  "boost::unit_test::lazy_ostream::inst", referenced from:
      boost::unit_test::lazy_ostream::instance() in tests.cpp.o
  "boost::unit_test::unit_test_main(bool (*)(), int, char**)", referenced from:
      _main in tests.cpp.o
  "boost::unit_test::unit_test_log_t::set_checkpoint(boost::unit_test::basic_cstring<char const>, unsigned long, boost::unit_test::basic_cstring<char const>)", referenced from:
      my_testsuite::addvalues_zero_invoker() in tests.cpp.o
      my_testsuite::addvalues_zero::test_method() in tests.cpp.o
      my_testsuite::addvalues_negpos_invoker() in tests.cpp.o
      my_testsuite::addvalues_negpos::test_method() in tests.cpp.o
  "boost::unit_test::unit_test_log_t::instance()", referenced from:
      ___cxx_global_var_init in tests.cpp.o
  "boost::unit_test::decorator::collector_t::instance()", referenced from:
      ___cxx_global_var_init.1 in tests.cpp.o
      ___cxx_global_var_init.3 in tests.cpp.o
      ___cxx_global_var_init.9 in tests.cpp.o
  "boost::unit_test::test_case::test_case(boost::unit_test::basic_cstring<char const>, boost::unit_test::basic_cstring<char const>, unsigned long, boost::function<void ()> const&)", referenced from:
      boost::unit_test::make_test_case(boost::function<void ()> const&, boost::unit_test::basic_cstring<char const>, boost::unit_test::basic_cstring<char const>, unsigned long) in tests.cpp.o
  "boost::unit_test::ut_detail::auto_test_unit_registrar::auto_test_unit_registrar(boost::unit_test::basic_cstring<char const>, boost::unit_test::basic_cstring<char const>, unsigned long, boost::unit_test::decorator::collector_t&)", referenced from:
      ___cxx_global_var_init.1 in tests.cpp.o
  "boost::unit_test::ut_detail::auto_test_unit_registrar::auto_test_unit_registrar(boost::unit_test::test_case*, boost::unit_test::decorator::collector_t&, unsigned long)", referenced from:
      ___cxx_global_var_init.3 in tests.cpp.o
      ___cxx_global_var_init.9 in tests.cpp.o
  "boost::unit_test::ut_detail::auto_test_unit_registrar::auto_test_unit_registrar(int)", referenced from:
      ___cxx_global_var_init.16 in tests.cpp.o
  "boost::unit_test::ut_detail::normalize_test_case_name(boost::unit_test::basic_cstring<char const>)", referenced from:
      boost::unit_test::make_test_case(boost::function<void ()> const&, boost::unit_test::basic_cstring<char const>, boost::unit_test::basic_cstring<char const>, unsigned long) in tests.cpp.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
ninja: build stopped: subcommand failed.

修改根目录的CmakeLists.txt

#arm架构
set(CMAKE_SYSTEM_PROCESSOR arm64)
set(CMAKE_OSX_ARCHITECTURES arm64)

cmake_minimum_required(VERSION 3.24)
project(cmake_testapp)

set(CMAKE_CXX_STANDARD 17)


add_executable(cmake_testapp main.cpp)
add_executable(cmake_testapp_calc main.cpp calc.cpp)

add_library (test_library STATIC calc.cpp)

target_include_directories (cmake_testapp_calc PUBLIC includes/math)
target_include_directories (cmake_testapp_calc PUBLIC includes/general)

find_library(TEST_LIBRARY test_library lib)
target_link_libraries(cmake_testapp LINK_PUBLIC ${TEST_LIBRARY})

add_subdirectory(test)

enable_testing()


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值