質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
CMake

CMakeはクロスプラットフォームで作動するオープンソースのビルドシステムです。コマンドライン又は組み込まれた開発環境で使うことができる元のmakefileとプロジェクトファイルを生成します。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

234閲覧

cmake でビルド時にリンクエラーが出てしまう

suk

総合スコア1

CMake

CMakeはクロスプラットフォームで作動するオープンソースのビルドシステムです。コマンドライン又は組み込まれた開発環境で使うことができる元のmakefileとプロジェクトファイルを生成します。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

1クリップ

投稿2024/02/18 20:11

編集2024/02/18 20:22

実現したいこと

drogonを用いたwebアプリのコントローラー内で自作の静的ライブラリを使用したい。

発生している問題・分からないこと

自作のライブラリを作成してcmakeでビルドをしているのですがリンクでエラーが出てしまいます。
ビルドは出来ました。
game_core_module.cc と db_module.cc の2つがあるのですが
game_core_moduleは正しくリンクできているように見えるのですが db_module.cc 内にある関数はなぜか定義されていないと言われてしまいます。

エラーメッセージ

error

1/usr/bin/ld: CMakeFiles/reversi-API.dir/controllers/api.cc.o: in function `api::post_find(std::shared_ptr<drogon::HttpRequest> const&, std::function<void (std::shared_ptr<drogon::HttpResponse> const&)>&&)': 2api.cc:(.text+0xabc): undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > ArgsModifier::join_fmt<char [11], char [11]>(char const (&) [11], char const (&) [11])' 3/usr/bin/ld: libmodules.a(game_core_module.cc.o): in function `create_instance(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)': 4game_core_module.cc:(.text+0x154): undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > VarConverter::arr2str<int>(int const*, int const&)' 5/usr/bin/ld: game_core_module.cc:(.text+0x1bf): undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > ArgsModifier::fmt_gen<char [10], char [11], char [6], char [5], char [12]>(char const (&) [10], char const (&) [11], char const (&) [6], char const (&) [5], char const (&) [12])' 6/usr/bin/ld: game_core_module.cc:(.text+0x1f4): undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > ArgsModifier::join<char [10], char [11], char [6], char [5], char [12]>(char const (&) [10], char const (&) [11], char const (&) [6], char const (&) [5], char const (&) [12])' 7/usr/bin/ld: libmodules.a(game_core_module.cc.o): in function `search_Instance(Instance&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)': 8game_core_module.cc:(.text+0x93b): undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > ArgsModifier::join<char [5], char [11], char [11], char [12]>(char const (&) [5], char const (&) [11], char const (&) [11], char const (&) [12])' 9/usr/bin/ld: game_core_module.cc:(.text+0xe57): undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > ArgsModifier::join<char [5], char [11], char [11], char [12]>(char const (&) [5], char const (&) [11], char const (&) [11], char const (&) [12])' 10/usr/bin/ld: libmodules.a(game_core_module.cc.o): in function `verfy_pass(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)': 11game_core_module.cc:(.text+0x1a85): undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > ArgsModifier::join<char [5]>(char const (&) [5])' 12/usr/bin/ld: libmodules.a(game_core_module.cc.o): in function `verfy_instance_id(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)': 13game_core_module.cc:(.text+0x1fb6): undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > ArgsModifier::join<char [12]>(char const (&) [12])' 14collect2: error: ld returned 1 exit status 15make[2]: *** [CMakeFiles/reversi-API.dir/build.make:139: reversi-API] エラー 1 16make[1]: *** [CMakeFiles/Makefile2:111: CMakeFiles/reversi-API.dir/all] エラー 2 17make: *** [Makefile:91: all] エラー 2

該当のソースコード

CMakeLists

1```txt 2ccmake_minimum_required(VERSION 3.5) 3 4project( 5 reversi-API 6 VERSION 0.1.0 7 DESCRIPTION "REVERSI GAME WEB API" 8 LANGUAGES CXX 9) 10 11include(CheckIncludeFileCXX) 12 13check_include_file_cxx(any HAS_ANY) 14check_include_file_cxx(string_view HAS_STRING_VIEW) 15check_include_file_cxx(coroutine HAS_COROUTINE) 16if (NOT "${CMAKE_CXX_STANDARD}" STREQUAL "") 17elseif (HAS_ANY AND HAS_STRING_VIEW AND HAS_COROUTINE) 18 set(CMAKE_CXX_STANDARD 20) 19elseif (HAS_ANY AND HAS_STRING_VIEW) 20 set(CMAKE_CXX_STANDARD 17) 21else () 22 set(CMAKE_CXX_STANDARD 14) 23endif () 24 25set(CMAKE_CXX_STANDARD_REQUIRED ON) 26set(CMAKE_CXX_EXTENSIONS OFF) 27 28set(MODULE_DIR modules) 29add_library(modules STATIC 30 ${MODULE_DIR}/db_module.cc 31 ${MODULE_DIR}/game_core_module.cc 32) 33target_include_directories(modules PRIVATE ${MODULE_DIR}) 34target_link_libraries(modules PRIVATE Drogon::Drogon) 35 36add_executable(${PROJECT_NAME} main.cc) 37 38# ############################################################################## 39# If you include the drogon source code locally in your project, use this method 40# to add drogon 41# add_subdirectory(drogon) 42# target_link_libraries(${PROJECT_NAME} PRIVATE drogon) 43# 44# and comment out the following lines 45find_package(Drogon CONFIG REQUIRED) 46target_link_libraries(${PROJECT_NAME} PRIVATE 47 Drogon::Drogon 48 modules 49) 50 51# ############################################################################## 52 53if (CMAKE_CXX_STANDARD LESS 17) 54 message(FATAL_ERROR "c++17 or higher is required") 55elseif (CMAKE_CXX_STANDARD LESS 20) 56 message(STATUS "use c++17") 57else () 58 message(STATUS "use c++20") 59endif () 60 61aux_source_directory(controllers CTL_SRC) 62aux_source_directory(filters FILTER_SRC) 63aux_source_directory(plugins PLUGIN_SRC) 64aux_source_directory(models MODEL_SRC) 65 66drogon_create_views(${PROJECT_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/views 67 ${CMAKE_CURRENT_BINARY_DIR}) 68# use the following line to create views with namespaces. 69# drogon_create_views(${PROJECT_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/views 70# ${CMAKE_CURRENT_BINARY_DIR} TRUE) 71# use the following line to create views with namespace CHANGE_ME prefixed 72# and path namespaces. 73# drogon_create_views(${PROJECT_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/views 74# ${CMAKE_CURRENT_BINARY_DIR} TRUE CHANGE_ME) 75 76target_include_directories(${PROJECT_NAME} PRIVATE 77 ${MODULE_DIR} 78 ${CMAKE_CURRENT_SOURCE_DIR} 79 ${CMAKE_CURRENT_SOURCE_DIR}/models) 80 81target_sources(${PROJECT_NAME} PRIVATE 82 ${SRC_DIR} 83 ${CTL_SRC} 84 ${FILTER_SRC} 85 ${PLUGIN_SRC} 86 ${MODEL_SRC}) 87# ############################################################################## 88# uncomment the following line for dynamically loading views 89# set_property(TARGET ${PROJECT_NAME} PROPERTY ENABLE_EXPORTS ON) 90 91# ##############################################################################
### 試したこと・調べたこと - [x] teratailやGoogle等で検索した - [x] ソースコードを自分なりに変更した - [ ] 知人に聞いた - [ ] その他 ##### 上記の詳細・結果 リンクエラーで検索して見たのですがさっぱりです。 ### 補足 エラーになっている関数は全てtemplateを使用しているので何か関係があるかもしれません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

解決経緯

ボイラープレートな関数でコケているのに気づいてそれをすべて削除した。

原因

おそらく上記のボイラープレートな関数のリンクがうまく行ってないことですが原理は不明です。

投稿2024/02/19 07:47

suk

総合スコア1

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問