1
CのプロジェクトAをメインプログラム、プロジェクトBを共有オブジェクト(.so)のモジュールとします。プロジェクトAは、両方のプロジェクトで共通のソースとヘッダーで構成されています。プロジェクト実行時にロードモジュールの.soファイル。モジュラープロジェクト用のCMakeファイルを正しく作成する方法
プロジェクトA:
class-AI.cpp (It contains function funcA)
class-AI.h
class-AII.cpp
class-AII.h
class-AIII.cpp
class-AIII.h
main.cpp
プロジェクトB:(共有オブジェクト)
class-BI.cpp (Its inherit from class-AI)
class-BI.h
cmakeのは、両方のプロジェクトが正常にビルドファイルを次のようで。
プロジェクトA CMakefile:
cmake_minimum_required(VERSION 3.6)
project(ProjectA)
set(CMAKE_CXX_STANDARD 11)
set(SOURCE_FILES
main.cpp
class-AI.cpp
class-AI.h
class-AII.cpp
class-AII.h
class-AIII.cpp
class-AIII.h)
add_executable(ProjectA ${SOURCE_FILES})
set(EXECUTABLE_OUTPUT_PATH /opt/ProjectA/bin/)
プロジェクトB CMakefile:は
cmake_minimum_required(VERSION 3.6)
project(ProjectB)
set(CMAKE_CXX_STANDARD 11)
set(SOURCE_FILES class-BI.cpp class-BI.h)
add_library(ProjectB SHARED ${SOURCE_FILES})
set_target_properties(ProjectB PROPERTIES
PREFIX ""
LIBRARY_OUTPUT_DIRECTORY /opt/ProjectA/bin/)
しかし、ランタイムプロジェクトで次のエラーが表示されます:
undefined symbol: _ZN6class-AI4funcAEv
方法CA n CMakeファイルを使用してプロジェクトBに正しく依存関係を追加し、このエラーを解決しますか? (実際に私のnetbeans C++プロジェクトをJetbrains CLionに変更したい)
参照[CMakeの/チュートリアル/ターゲットのエクスポートとインポート](https://cmake.org/Wiki/CMake/Tutorials/Exporting_and_Importing_Targets#Importing_Targets):私の問題は、cmakeのファイルをプロジェクトにこの行を追加することで解決しました。あなたはプロジェクトAのCMakeファイルにプロジェクトBを認識させる必要があります。いくつかの方法がありますので、おそらく 'add_library(ProjectB SHARED IMPORTED GLOBAL) 'で始まるものを追加するでしょう。... – Florian
@Florian:ありがとう。私はあなたが言ったことをして、私の問題は解決しました。 :) – mitrc