我知道类似的问题已张贴,但我看不出他们如何与我的情况。我将通过说我对CMake不是很熟悉来解释这个问题,所以完全有可能这是一个快速修复,我只是看不到它!不能与CMake的编译和NCURSES
我合作的一个项目,昨天我的队友加入ncurses库的项目,以建立一个终端GUI。自从添加了ncurses之后,我一直无法编译我的项目。但是,我确实安装了所有6个ncurses- *包,因此它应该适用于我的机器。
我从我们的GitHub库,它编译和运行完全在他的机器上拆了最新版本的主分支。但它甚至不会在我的编译。
系统:
Linux Mint的18.1肉桂
的CMake版本3.5.1
事情我已经尝试:
我删除CMakeCache.txt并重新加载它
我删除了我整个的CMake建立目录和redid制作
CMakeLists.txt:
cmake_minimum_required(VERSION 2.8)
project(irc)
set(SHARED_FLAGS " -Wall -Wextra -Wshadow -Werror -g -D_POSIX_C_SOURCE=200809L -lncurses")
set(CMAKE_C_FLAGS "-std=c11 ${SHARED_FLAGS}")
set(CMAKE_CXX_FLAGS "-std=c++11 ${SHARED_FLAGS}")
include_directories(include)
add_library(client_core SHARED src/client/irc_client.c)
add_executable(client src/client/irc_client_gui.c)
add_executable(server src/server/irc_server.c)
// SOLUTION - MISSING LINE
target_link_libraries(client ncurses)
install(FILES include/irc_client.h DESTINATION include)
install(FILES include/irc_server.h DESTINATION include)
CMakeOutput:
CMakeFiles/client.dir/src/client/irc_client_gui.c.o: In function `main':
/home/chrisjansson/Documents/irc/src/client/irc_client_gui.c:17:
undefined reference to `initscr'
/home/chrisjansson/Documents/irc/src/client/irc_client_gui.c:18:
undefined reference to `stdscr'
/home/chrisjansson/Documents/irc/src/client/irc_client_gui.c:18:
undefined reference to `stdscr'
/home/chrisjansson/Documents/irc/src/client/irc_client_gui.c:18:
undefined reference to `stdscr'
/home/chrisjansson/Documents/irc/src/client/irc_client_gui.c:18:
undefined reference to `stdscr'
/home/chrisjansson/Documents/irc/src/client/irc_client_gui.c:19:
undefined reference to `mvprintw'
/home/chrisjansson/Documents/irc/src/client/irc_client_gui.c:21:
undefined reference to `stdscr'
/home/chrisjansson/Documents/irc/src/client/irc_client_gui.c:21:
undefined reference to `wgetnstr'
/home/chrisjansson/Documents/irc/src/client/irc_client_gui.c:22:
undefined reference to `LINES'
/home/chrisjansson/Documents/irc/src/client/irc_client_gui.c:22:
undefined reference to `mvprintw'
/home/chrisjansson/Documents/irc/src/client/irc_client_gui.c:23:
undefined reference to `stdscr'
/home/chrisjansson/Documents/irc/src/client/irc_client_gui.c:23:
undefined reference to `wgetch'
/home/chrisjansson/Documents/irc/src/client/irc_client_gui.c:24:
undefined reference to `endwin'
collect2: error: ld returned 1 exit status
CMakeFiles/client.dir/build.make:94: recipe for target 'client' failed
make[2]: *** [client] Error 1
CMakeFiles/Makefile2:104: recipe for target 'CMakeFiles/client.dir/all'
failed
make[1]: *** [CMakeFiles/client.dir/all] Error 2
Makefile:127: recipe for target 'all' failed
make: *** [all] Error 2
有趣的是,如果我复制/粘贴irc_client_gui.c别人在我的机器上的某个地方,手工用gcc编译并运行它,它完美的作品。所以这个问题不是我的机器,它是CMake试图编译我的整个项目的东西。有任何想法吗?非常感谢!
'所以,问题不在于我的机器,它的东西与CMake的尝试编译我的整个project.' - 在项目的'CMakeLists.txt'文件中的问题,但你没有表现出来。 – Tsyvarev
@Tsyvarev oops,我只是把它添加到顶部。谢谢! –
如何运行'使VERBOSE = Y'这样你就可以清楚地看到,编译器/连接器是如何调用?我强烈怀疑'-lncurses'没有在链接器步骤中传递,因为您没有使用类似'target_link_libraries'的东西。未定义的引用错误通常是由链接期间缺少'-l'参数引起的。 –