【问题标题】:How to link libraries in CLion?如何在 CLion 中链接库?
【发布时间】:2021-07-06 12:44:21
【问题描述】:

我已经解决这个问题一段时间了,找不到任何东西可以解决我的问题。我试图在我的程序中使用 ncurses.h 库,但链接器失败并告诉我我有未定义的符号。我通过创建一个名为 includes 的新文件夹并将 ncurses.h 的位置从 /Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/usr/include/ncurses.h 复制到新文件夹来解决此问题。然后我将这一行放入我的 CMakeLists.txt 文件中:target_link_libraries(<project name> includes/ncurses.h)。但后来我收到另一个错误说ld: library not found for -lincludes/ncurses.h。我试过使用add_library(),但这给了我一个错误提示:

The target name "includes/ncurses.h" is reserved or not valid for certain
  CMake features, such as generator expressions, and may result in undefined
  behavior.

还有人有其他建议吗?

【问题讨论】:

  • 这能回答你的问题吗? CMake can't find Curses
  • @jordanvrtanoski 该问题中的任何解决方案都没有回答我的问题。更新 cmakelist.txt 文件时没有什么异常,除了构建程序时相同的ld: library not found error
  • 我将发布简短的工作示例

标签: c linker


【解决方案1】:

要找到ncurses 库的位置,您需要使用find_package() 来定位Curses 包。 find_package() 将返回 CURSES_INCLUDE_DIRCURSES_LIBRARY 环境变量以及包含文件和库的位置。

以下是适用于 macOS 上的 CLion 的最小示例:

CMakeLists.txt

cmake_minimum_required(VERSION 2.9)
project(test)

find_package(Curses REQUIRED)
include_directories(${CURSES_INCLUDE_DIR})

add_executable(test test.c)
target_link_libraries(test ${CURSES_LIBRARY})

test.c

#include <ncurses.h>

int main()
{
    initscr();          /* Start curses mode          */
    printw("Hello World !!!");  /* Print Hello World          */
    refresh();          /* Print it on to the real screen */
    getch();            /* Wait for user input */
    endwin();           /* End curses mode        */

    return 0;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-06
    • 1970-01-01
    • 2019-09-05
    • 2021-09-29
    • 2021-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多