静态库与共享库中的多个符号定义

问题描述 投票:0回答:0

这里是一个简单的CMake项目:

cmake_minimum_required(VERSION 3.0)

project(Test)

add_library(Test STATIC test1.cpp test2.cpp)

test1
如下:

// test1.h
#pragma once

void test();

// test1.cpp
#include "test1.h"

void test() 
{

}

test2

// test2.h
#pragma once

void test();

// test2.cpp
#include "test2.h"

void test() 
{

}

这个项目编译得很好。但是,如果我将库更改为动态的:

add_library(Test SHARED test1.cpp test2.cpp)

项目编译失败并显示链接错误 (MSVC 17.5.1):

致命错误 LNK1169:找到一个或多个多重定义的符号

什么原因导致静态库编译通过,共享库编译失败?我希望静态库也会失败,但这并没有发生。

c++ linker linker-errors
© www.soinside.com 2019 - 2024. All rights reserved.