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

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

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

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

make

make は、ビルド作業を自動化するツールです。さまざまなファイルの最終変更時刻を比較し、従属するファイルよりも「ターゲット」のファイルが古いことがわかったときユーザーが設定していた命令を実行する事が可能です。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

C++

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

Q&A

解決済

1回答

6140閲覧

makeでビルドしたいのにclang: error: linker command failed with exit code 1が消えない。

I_am_

総合スコア23

CMake

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

make

make は、ビルド作業を自動化するツールです。さまざまなファイルの最終変更時刻を比較し、従属するファイルよりも「ターゲット」のファイルが古いことがわかったときユーザーが設定していた命令を実行する事が可能です。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

C++

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

0グッド

0クリップ

投稿2021/03/11 12:58

編集2021/03/11 13:47

前提・実現したいこと

macOSから実行ファイルを作成したいです。
オブジェクトファイルのビルドにエラーはないのですが、
Linking CXX shared library librunning.dylib
ここの部分で作成した動的ファイルとのリンクに失敗してしまいます。

macOS Big Sur 11.2.2
opencv/4.5.1_3
cmake version 3.19.1
GNU Make 3.81
Apple clang version 11.0.3

発生している問題・エラーメッセージ

Scanning dependencies of target running [ 4%] Building CXX object /"".cpp.o "".cpp:112:8: warning: unused variable 'num' [-Wunused-variable] ......... ......... [ 85%] Building CXX object [ 90%] Linking CXX shared library librunning.dylib Undefined symbols for architecture x86_64: "cv::medianBlur(cv::_InputArray const&, cv::_OutputArray const&, int)", referenced from: aaa(int, char**) in bbb.cpp.o "cv::FileStorage::open(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)", referenced from: ccc(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&) in ddd.o Parameters(int, char**) in ccc.cpp.o .......... .......... .......... ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation) make[2]: *** [""/librunning.dylib] Error 1 make[1]: *** [""/CMakeFiles/running.dir/all] Error 2 make: *** [all] Error 2

Cmakeの構成です。

----build
|
| --src
| |--CMakeLists2.txt
| |--*cpp
| |--*h
| |--include
| |--*cpp
| |--*h
| --root
| |--CMakeLists2.txt
| |--main.cpp
|
|--CMakeLists1.txt

makefile

CMakeLists1.txt

cmake_minimum_required(VERSION 3.1) project(test_cmake CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_FLAGS "-DPIC -O3 -Wall") find_package(OpenCV REQUIRED) include_directories( ${OpenCV_INCLUDE_DIRS} ) add_subdirectory(src) add_subdirectory(root)

CMakeLists2.txt

add_executable(run_test main.cpp) target_link_libraries(run_test ${OpenCV_LIBS} running)

CMakeLists3.txt

file(GLOB MY_SOURCE ${PROJECT_SOURCE_DIR}/src/include/*.cpp  ${PROJECT_SOURCE_DIR}/src/include/*.h ) add_library(running SHARED aaa.cpp bbb.cpp ccc.cpp ${MY_SOURCE} ) target_include_directories(running PUBLIC ${PROJECT_SOURCE_DIR}/src/include PUBLIC ${PROJECT_SOURCE_DIR}/src ${OpenCV_INCLUDE_DIRS} ${MY_SOURCE} )

https://qiita.com/shohirose/items/45fb49c6b429e8b204ac
などを参照にして構成しました。

わからないこと, 質問

>例えばなのですが、
cv::medianBlur(const Mat& src, Mat& dst, int ksize)のパラメータに
cv::medianBlur(cv::_InputArray const&, cv::_OutputArray const&, int)のような型がゆるい引数を指定することによるエラーは可能性がありますか?
https://qiita.com/fukushima1981/items/d283b3af3e21d94550c4

OpenCVの標準的なデータ入出力の形式は,1.0の時代ではIplImage構造体が,2.0の時つ代ではcv::Matクラスが使われてきました.そして,2.0から3.0への変換期の今では,それらがcv::InputArrayとcv::OutputArrayに代わりつつあります.ここでは,新しい入出力クラスであるInputArrayとOutputArrayを説明します. このInputArrayとOutputArrayは,新しい型というよりも,呼び出す関数の引数にユーザが型を意識しなくても代入できるようにするためのジェネリクスプログラミングの一種です

>warning: unused variable ‘num’ [-Wunused-variable]
がリンクに影響することはありますか?

リンクのエラーなのでソースコードのビルドが関係しているとは思わないのですが、
現状考えられることがこれくらいしかありません。

何かわかることや、ここを見ると原因がわかるなどありましたら教えていただきたいです。

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

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

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

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

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

yuki23

2021/03/11 14:18

ソースコードを質問文に載せてください。 >>warning: unused variable ‘num’ [-Wunused-variable] >がリンクに影響することはありますか? ソースコードもなしに回答できると思いますか?
I_am_

2021/03/11 14:26

すみませんどこまで載せていいか度合いがわからなくて、、
guest

回答1

0

ベストアンサー

Undefined symbols for architecture x86_64:

未定義のシンボルを使っている、とおっしゃってますよ

投稿2021/03/11 13:52

y_waiwai

総合スコア87719

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

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

I_am_

2021/03/11 14:06

他のOSではできたので、 Opencvのバージョンによって明示的なインスタンス化が必要という可能性は考えられますか?
y_waiwai

2021/03/11 14:08

そのシンボルがどこでどういうふうに定義されてるのか確認しましょうよ それさえしないでいくら考えても無駄ってもんですぜ
I_am_

2021/03/11 14:15

例えば、ソートのアルゴリズムで連想配列クラスの引数にless<int>をless<>みたいな感じで引数を明示しなかったことによるなど、
I_am_

2021/03/11 14:48

バージョンやOSに依存関係があると思ってました。 一つずつシンボルを追ってみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問