我一直在研究一个更大的项目,并且在将其重构为多个编译单元时,偶然发现了一个问题。 每个编译单元都包含一个它需要的自定义库,它们都正常编译,但是当Xcode尝试链接时,链接器会抛出许多重复的符号错误。
该库也由多个文件组成,其中一些文件需要彼此。以下是库文件编写方式的示例。
文件1:
// lib.hpp
#ifndef LIB1_HPP_
#define LIB1_HPP_
namespace lib1
{
class Class1
{
void foo (int a);
}
}
#endif
文件2:
// lib.cpp
#include "lib.hpp"
lib1::Class1:foo (int a)
{
return ...;
}
包含的唯一文件是.hpp文件,.cpp文件使用-c
编译并添加到Xcode中的项目中。
提到的错误是(更改的函数名称与本文中的函数名称相匹配):
duplicate symbol __ZN5lib13Class5_fooE in:
/Users/---/Library/Developer/Xcode/DerivedData/Project-haivawxacqnzswdyqtfrxlrqlakt/Build/Intermediates/Project.build/Debug/Project.build/Objects-normal/x86_64/file.o
错误出现多次,因为库中有多个函数,但它总是一样的。
答案 0 :(得分:0)
你应该添加
#pragma once
或
#ifndef Class1_h
#define Class1_h
... your declarations ...
#endif
答案 1 :(得分:0)
问题是我错误地使用extern的问题。我刚刚修好了。