如何 link CLion 中的库?
How to link libraries in CLion?
我已经解决这个问题一段时间了,但找不到任何方法来解决我的问题。我试图在我的程序中使用 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.
大家还有什么建议吗?
要找到 ncurses
库的位置,您需要使用 find_package()
来定位 Curses
包。 find_package()
将 return CURSES_INCLUDE_DIR
和 CURSES_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;
}
我已经解决这个问题一段时间了,但找不到任何方法来解决我的问题。我试图在我的程序中使用 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.
大家还有什么建议吗?
要找到 ncurses
库的位置,您需要使用 find_package()
来定位 Curses
包。 find_package()
将 return CURSES_INCLUDE_DIR
和 CURSES_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;
}