【问题标题】:Code is not compiling with cmake on MacOS? (SFML)代码没有在 MacOS 上用 cmake 编译? (SFML)
【发布时间】:2021-07-08 02:10:44
【问题描述】:

我是 CMake 新手,当我在 cmake 之后运行 make 时,我的代码没有正确链接。

如果我使用 apple clang 的默认编译器,则代码根本无法编译,因此我将 CMakeLists.txt 文件中的编译器更改为使用 g++ 而不是 AppleClang,使用这些行:

###########################
# CMake Build Environment #
###########################
#
# You can set the following Environment variables:
#
# CMAKE_MODULE_PATH to the search path for cmake modules (e.g., SFML.cmake)
# CMAKE_BUILD_TYPE to override the default build type. Valid options are 'release', 'profile' and 'debug'
#
#########################################


set(CMAKE_C_COMPILER "gcc-10")
set(CMAKE_CXX_COMPILER "g++-10")
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
#set(CMAKE_CXX_STANDARD 11)

它应该使用 C++11,但我不确定它是否这样做。当我取消注释 CMAKE 标志时,它仍然给出相同的错误。

当我运行 make 时:

[ 91%] Built target Bird_core
Scanning dependencies of target bird
[ 95%] Building CXX object CMakeFiles/bird.dir/bin/bird.cpp.o
[100%] Linking CXX executable bird
Undefined symbols for architecture x86_64:
  "__ZN2sf4Font12loadFromFileERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", referenced from:
      __ZN13ResourceCache16loadFontResourceERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ in libBird_core.a(ResourceCache.cpp.o)
  "__ZN2sf6StringC1EPKcRKSt6locale", referenced from:
      __ZN9__gnu_cxx13new_allocatorIN2sf12RenderWindowEE9constructIS2_JNS1_9VideoModeERA11_KcNS1_5Style9._anon_74ERNS1_15ContextSettingsEEEEvPT_DpOT0_ in libBird_core.a(Game.cpp.o)
  "__ZN2sf6StringC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKSt6locale", referenced from:
      __ZN19PlayingMenuActivity6updateERKf in libBird_core.a(PlayingMenuActivity.cpp.o)
      __ZN6Button9setStringERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE in libBird_core.a(Button.cpp.o)
  "__ZN2sf7Texture12loadFromFileERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_4RectIiEE", referenced from:
      __ZN13ResourceCache19loadTextureResourceERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ in libBird_core.a(ResourceCache.cpp.o)
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status
make[2]: *** [bird] Error 1
make[1]: *** [CMakeFiles/bird.dir/all] Error 2

代码应该不是问题(它适用于 Linux/Windows,我将编译器从 Apple clang 更改为 g++)。触发此事件的代码部分只是来自库 SFML 的 font.loadFromFile() 和 texture.loadFromFile()。我认为这与我如何链接 SFML 或其他东西有关。

感谢您的帮助,谢谢!

【问题讨论】:

  • 你能显示产生错误的代码吗?
  • Debug % cmake .. Debug % make
  • 那不是 C++ 代码。显示产生这个特定问题的 C++ 代码,至少是你认为的那一行。
  • 显示。这。 C++。代码。请。也许 GCC 对此感到满意,而 clang 则不满意。
  • edit您的问题包含带有完整源代码的minimal reproducible example,编译器命令行或cmake文件以及完整的错误消息

标签: c++ macos cmake sfml


【解决方案1】:

Cross-post 来自 SFML 论坛

在 C++11 的 GCC 中更改了 std::string ABI。

因此,您需要确保使用与您的应用程序相同的运行时编译 SFML。 和/或可以尝试为您的代码启用/禁用 C++11 标准。

就个人而言,我建议坚持使用 Xcode/clang

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    • 2018-03-05
    • 2023-04-02
    • 1970-01-01
    • 2014-07-10
    相关资源
    最近更新 更多