c++ - 纠正 Xcode 中的工作流程以避免错误:Architecture x86_64 的重复符号
问题描述
背景
嗨,我正在学习 C++ 和 Xcode 新手。我一直遇到标题中所说的错误,不知道如何解决。我想知道在 Xcode 中学习正确的工作流程是否能帮助我避免这个问题。
这是我的目录:
我这里有:
在项目signal下,我首先创建了一个名为 signalMean的组,其中包含一些文件并且编译得很好。然后我简单地在 signal 下创建了另一个名为 signalVariance 的组,将完全相同的文件从signalMean复制到这个新组。在我将新函数添加到 main.cpp 文件并将其重命名为signalVariance.cpp 后,我在尝试编译时不断收到重复符号错误。
代码
// waveforms.h
extern double InputSignal_f32_1kHz_15kHz[320];
// waveforms.cpp
#include "waveforms.h"
double InputSignal_f32_1kHz_15kHz[320] =
{+0.0000000000f, +0.5924659585f, -0.0947343455f,...}
// signalMean.cpp
#include <iostream>
#include "waveforms.h"
#define SIG_LENGTH 320
double calc_signal_mean(double *sig_src_arr, int sig_length);
double signal_mean;
int main() {
//code
}
double calc_signal_mean(double *sig_src_arr, int sig_length) {
//code
}
错误
duplicate symbol _InputSignal_f32_1kHz_15kHz in:
.../x86_64/waveforms-c8eb105c3a214768b4cffcf6a99ba09ec9961410b041f2905a2df7e9fe06655e.o
.../x86_64/waveforms-c8eb105c3a214768b4cffcf6a99ba09e2eac5ae7a592aee13a84d551d65ef983.o
duplicate symbol _main in:
.../x86_64/signalVariance.o
.../x86_64/signalMean.o
duplicate symbol _signal_mean in:
.../x86_64/signalVariance.o
.../x86_64/signalMean.o
duplicate symbol __Z16calc_signal_meanPdi in:
.../x86_64/signalVariance.o
.../x86_64/signalMean.o
ld: 4 duplicate symbols for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
问题
如果我想继续从以前编写的代码构建项目,Xcode 中的正确工作流程应该是什么以避免这个问题?每个组将代表一个不同的主题/功能,但它们彼此共享代码,将它们放在同一个项目下是有意义的,例如signal。
很抱歉,这是一个冗长的问题。如果有人能指出我正确的方向,我将不胜感激。
解决方案
我认为您混淆了 Xcode组和 Xcode目标。
组是在您的项目中组织源代码的一种方法(它们还在文件系统中创建文件夹),但是,对于您的问题至关重要的是,所有源代码都被编译成同一个目标可执行文件。
我认为您想要做的是在项目中创建多个目标,这允许您定义哪些源代码文件属于哪个目标。请参阅有关使用目标的Apple 指南。
如果您没有意识到,您不能在单个可执行单元(可执行文件或 dylib)中拥有同一符号(方法或变量)的多个副本。
推荐阅读
- chisel - java.lang.AssertionError:断言失败:
- ruby-on-rails - 如何使用 Rails ActiveStorage 将一个对象从一个模型复制到另一个模型
- python - Python 3 中的多行串行读取
- django - 如何在字典列表中附加新的键和值?
- php - 不能在for循环中使用ajax接收的变量
- testing - VSTest.Console.exe 中用于 Win Universal Apps 单元测试的 FrameworkUap10 在哪里
- css - 当浏览器窗口调整大小时,在居中元素和绝对/固定元素之间平滑移动
- excel - 需要帮助在 Excel 中的两个不相似列表中查找匹配项
- python - 如何找到一个巨大的 csv 文件的 10 个最大值?
- spring - 弹簧集成。缺少消息。民意调查导致消息:GenericMessage