同様の質問が掲載されていることは承知していますが、私のケースにどのように関連するのか分かりません。私はこの質問の前に、CMakeにはあまりよく知られていないと言っていますので、これは簡単な修正であり、私はそれを見ていないのです!CMakeとncursesでコンパイルできない
私はプロジェクトで協力しています。昨日、チームメイトはncursesライブラリをプロジェクトに追加して、ターミナルGUIを構築しました。 ncursesが追加されて以来、私はプロジェクトをコンパイルできませんでした。しかし、6つのncurses- *パッケージをすべてインストールしたので、自分のマシンで動作するはずです。
私はGitHubリポジトリから最新のバージョンのmasterブランチをプルダウンしました。これは彼のマシン上で完璧にコンパイルされ実行されています。しかし、それは私の上でコンパイルされません。
システム:
Linuxのミント18.1シナモン
CMakeのバージョン3.5.1
私が試したもの:
私はCMakeCache.txtを削除し、
それを再読み込み、私は私の全体にCMakeを削除ディレクトリを作り直してください。
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
興味深いことに、私はgccで手動でコンパイルして実行し、私のマシン上の他の場所/ペーストirc_client_gui.cをコピーする場合、それは完璧に動作します。だから問題は私のマシンではなく、私のプロジェクト全体をコンパイルしようとするCMakeのものです。何か案は?本当にありがとう!
'問題は私のマシンではなく、CMakeが私のプロジェクト全体をコンパイルしようとするものです。 ' - プロジェクトの' CMakeLists.txt'ファイルの問題ですが、あなたはそれを表示しません。 – Tsyvarev
@Tsyvarevおっと、私はちょうどそれを上に追加しました。ありがとう! –
'make VERBOSE = Y'を実行すると、コンパイラ/リンカの呼び出し方法を正確に見ることができますか?あなたが 'target_link_libraries'のようなものを使わなかったので、' -lncurses'がリンカのステップで渡されていないことを強く疑っています。定義されていない参照エラーは、リンク時に '-l'引数が見つからないことが原因です。 –