gpt4 book ai didi

c++ - 包含库时函数的多重定义

转载 作者:行者123 更新时间:2023-11-30 03:51:14 27 4
gpt4 key购买 nike

我尝试在我的项目的不同文件中包含库中的 header ,但我在库的某些函数上遇到多个定义错误。阅读this question的答案后我认为问题在于函数是直接在库的头文件中实现的。

特别是我想包含来自 FastPFor 的文件 codecfactory.hdeltautil.h .我不知道它是否与我的问题相关,但我将它包含在我的 cmake 项目中,并在我的 CMakeLists.txt 中使用以下代码:

include_directories(../../FastPFor/headers)
add_library(FastPFor STATIC ../../FastPFor/src/bitpacking.cpp
../../FastPFor/src/bitpacking.cpp
../../FastPFor/src/bitpackingaligned.cpp
../../FastPFor/src/bitpackingunaligned.cpp
../../FastPFor/src/horizontalbitpacking.cpp
../../FastPFor/src/simdunalignedbitpacking.cpp
../../FastPFor/src/simdbitpacking.cpp
${HEADERS}
)

如果我只包含一次文件,一切正常。但是一旦我在两个 .cpp 文件中使用它们,我就会遇到这些类型的错误:

CMakeFiles/dbgen.bin.dir/queries/Query5.cpp.o: In function `vsencoding::BitsWriter::BitsWriter(unsigned int*)':
Query5.cpp:(.text+0x8420): multiple definition of `vsencoding::BitsWriter::BitsWriter(unsigned int*)'
CMakeFiles/dbgen.bin.dir/queries/Query13Naive.cpp.o:Query13Naive.cpp:(.text+0x7a50): first defined here

有什么方法可以解决此问题而无需更改 FastPFor 代码,而只需更改我自己的代码?

最佳答案

您链接到的问题说明了一切 - 如果不修改 header (或仅将它们包含在一个源文件中)就无法解决此问题。

例如this line 在标题中定义了一个非内联构造函数。将其包含在多个翻译单元中会导致违反 ODR 规则。

关于c++ - 包含库时函数的多重定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31411604/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com