c++ - 在多个编译单元中使用的 C++ 库导致链接器错误

标签 c++ xcode clang

我一直致力于一个更大的项目,在将其从以前只有一个的状态重构为多个编译单元时偶然发现了一个问题。 每个编译单元都包含一个它需要的自定义库,它们都可以正常编译,但是当 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/

相关文章:

c++ - 我如何在 Windows 上的 C++ 中根据文件的修改时间读取目录中的文件

c++ - 如何优化多重映射的删除

c++ - 在 std 错误的命名空间中没有名为 'bind"的成员

c++ - clang交叉编译命令找不到头文件

c++ - Windows 上 clang 的运行时库

c++ - 指向成员变量的指针与通过指针传递

c++ - gtkmm:如何检测箭头键是否被按下

ios - 断点卡在主函数处

iphone - 我可以在 XCode 中保留一个项目,但为 Mac OS X、Apple Mac Store 和 iOS 设备构建它吗?