multiple definition of `uiContext'

来源:15-4 测试用例编写与单元测试

十三山入秋

2021-01-17

老师您好,我又来了,?,

D:/MyWorkHome/Apps/Tools/Msys2/install/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles\calculator.dir/objects.a(unit_test_ui.c.obj):D:/MyWorkHome/CodeSpace/CSpace/C-MOOC/chapter5/unit_test_ui.c:11: multiple definition of `uiContext'; CMakeFiles\calculator.dir/objects.a(console_ui.c.obj):D:/MyWorkHome/CodeSpace/CSpace/C-MOOC/chapter5/console_ui.c:8: first defined here
collect2.exe: error: ld returned 1 exit status
//unit_test_ui.c
#include "unit_test_ui.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


UiContext *uiContext;
//console_ui.c
#include "console_ui.h"
#include <stdlib.h>
#include <stdio.h>
UiContext *uiContext;

老师,这个怎么就重复定义了呢,是不是CMakelists文件有问题?

cmake_minimum_required(VERSION 3.13.4)

get_filename_component(ProjectId ${CMAKE_CURRENT_SOURCE_DIR} NAME)
string(REPLACE " " "_" ProjectId ${ProjectId})
project(${ProjectId} C)

set(CMAKE_C_STANDARD 11)

include_directories("include")

if (WIN32)
set(DEPS gtk+-3.0)
elseif (APPLE)
set(DEPS gtk+-3.0 glib-2.0)
else()
set(DEPS gtk+-3.0)
endif ()

# Use the package PkgConfig to detect GTK+ headers/library files
FIND_PACKAGE(PkgConfig REQUIRED)

foreach (dep ${DEPS})
PKG_CHECK_MODULES(${dep} REQUIRED ${dep})

INCLUDE_DIRECTORIES(${${dep}_INCLUDE_DIRS})
LINK_DIRECTORIES(${${dep}_LIBRARY_DIRS})
endforeach ()

if (WIN32)
set(CMAKE_C_FLAGS_RELEASE -mwindows)
endif()

file(GLOB files "${CMAKE_CURRENT_SOURCE_DIR}/*.c")
add_executable(calculator ${files})

foreach (dep ${DEPS})
target_link_libraries(calculator ${${dep}_LIBRARIES})
endforeach ()

唉,,,,

写回答

1回答

bennyhuo

2021-01-18

static UiContext *uiContext;

加static,文件内可见,不然就是全局可见。

0
1
十三山入秋
非常感谢!
2021-01-18
共1条回复

十三山入秋

提问者

2021-01-17

老师您好:这是我的代码仓库,

https://gitee.com/qiuyebai123/C_MOOC.git

0
0

C语言系统化精讲 重塑编程思想 打造坚实的开发基础

如果通向大牛的道路有捷径,那就是先学好C语言

2208 学习 · 853 问题

查看课程