c++ - CMAKE 静态库构建良好,但共享库链接失败
问题描述
我有一个具有以下结构的简单 c++ 程序。我在 Visual Studio 中使用 cmake 来构建它。
项目描述:
- 有一个根级别,其中包含名为module.cpp的主文件和module.h。
- Root 有一个子文件夹src,其中有另外两个文件夹iMath和utils。
- utils文件夹有一个myprint.h和myprint.cpp
- iMath是作为库构建的。它里面有2个文件夹,include文件夹有一个头文件additional.h,而src文件夹有一个additional.cpp。
问题详情:
当 iMath 作为静态库构建时,它构建得很好。但是,当它构建为共享库时,会导致LNK1104 无法打开文件 src\iMath\MathLib.lib错误。
根级别的CMakeLists.txt:
cmake_minimum_required (VERSION 3.8)
project (module4)
set(UTILS_SOURCE_DIR ${CMAKE_SOURCE_DIR}/src/utils)
# add subdirectory
add_subdirectory(src)
# Add source to this project's executable.
add_executable (
calculator
module.cpp
${UTILS_SOURCE_DIR}/myprint.cpp
)
target_include_directories(calculator PUBLIC ${UTILS_SOURCE_DIR})
target_link_libraries(calculator PUBLIC iMathLib)
src级别的CmakeLists.txt:
cmake_minimum_required (VERSION 3.8)
add_subdirectory(iMath)
iMath级别的CMakeLists.txt:
cmake_minimum_required (VERSION 3.8)
project(iMath)
set(SRC_FILES src/addition.cpp )
add_library(iMathLib SHARED ${SRC_FILES})
target_include_directories(iMathLib PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include)
ROOT级别的module.h
#pragma once
#include <iostream>
#include <string>
#include "addition.h"
#include "myprint.h"
在iMATH级别的最后一个CMakeLists.txt中,如果我将SHARED切换为 STATIC,一切正常。
有人可以指出我应该改变什么以便它与iMath共享以及构建的正确方向吗?
解决方案
推荐阅读
- google-colaboratory - Google Colaboratory 数据表最多显示 20 列
- angularjs - 使用 AngularJS 的 Asp.net MVC 剃须刀视图迁移到 Angular(混合)
- java - 将字符串中的 \t(制表符)替换为 Java 中制表符包含的空格数
- android - 如何获取应用程序的服务名称
- c# - 如何检查 cobertura.xml 文件的代码/测试覆盖率是否高于指定阈值?
- github - GitHub GraphQL 搜索空字符串
- python - 根据数组中的对象排除查询集中的对象
- javascript - 如何在里面访问 SVG