假设C++项目A是我的主程序,项目B是我的共享对象(.so)模块。项目A由两个项目之间常见的源和标头组成。项目A在运行时加载模块.so文件。
项目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/)但在运行时,项目A将出现以下错误:
undefined symbol: _ZN6class-AI4funcAEv如何使用CMake文件将依赖项正确添加到项目B并解决此错误?(实际上,我想将我的netbeans C++项目更改为Jetbrains CLion)
发布于 2017-01-08 10:56:36
感谢Florian的his comment。通过将这行添加到Project文件中,解决了我的问题:
add_library(ProjectB SHARED IMPORTED GLOBAL)
set_target_properties(ProjectB PROPERTIES IMPORTED_LOCATION "/opt/ProjectA/bin/ProjectB.so")
target_link_libraries(ProjectA ProjectB)https://stackoverflow.com/questions/41519666
复制相似问题