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回答
-
static UiContext *uiContext;
加static,文件内可见,不然就是全局可见。
012021-01-18 -
十三山入秋
提问者
2021-01-17
老师您好:这是我的代码仓库,
https://gitee.com/qiuyebai123/C_MOOC.git
00
相似问题