我知道類似的問題已張貼,但我看不出他們如何與我的情況。我將通過說我對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'參數引起的。 –