我一直致力于一个更大的项目,在将其从以前只有一个的状态重构为多个编译单元时偶然发现了一个问题。 每个编译单元都包含一个它需要的自定义库,它们都可以正常编译,但是当 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
错误多次出现,因为库中有多个函数,但它总是一样的。
最佳答案
你应该添加
#pragma once
或
#ifndef Class1_h
#define Class1_h
... your declarations ...
#endif
关于c++ - 在多个编译单元中使用的 C++ 库导致链接器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25286575/