包含库时函数的多重定义
Multiple definiton of function when including library
我尝试在项目的不同文件中包含库的头,并且在库的某些函数上得到多个定义错误。在阅读了这个问题的答案后,我认为问题在于函数是直接在库的头文件中实现的。
我特别想包括FastPFor中的文件codecfactory.h
和deltautil.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代码,但只有我自己?
您链接到的问题说明了一切-没有办法解决这个问题,而不修改头文件(或只是将它们包含在一个源文件中)。
例如,这一行在头文件中定义了一个非内联构造函数。在多个翻译单元中包含它将导致违反ODR规则。
解决这个问题的一种方法是将您的项目更改为仅头文件样式,即将您的实现移动到头文件。通过这种方式,您可以(或多或少地)保持项目的结构。然而,这绝对不是一个好的解决方案……
相关文章:
- 在命名空间中定义函数还是限定函数
- 为什么在定义函数之前先声明它
- 使用用户定义函数的字符串反转
- 用户定义函数中的指针和输入
- 这个c++代码是如何在没有定义函数的情况下运行的
- 具有外部"c"和程序集的未定义函数
- 已定义函数时出现 G++ "未定义的引用"错误
- 将自定义函数传递到基抽象类中以延迟执行
- C++使用 rand 定义函数语法
- Arduino:在 loop() 和自定义函数中运行相同的代码时出现问题
- 将具有固定签名的自定义函数名称注入 CRTP
- 使用定义函数模板别名
- 是否可以使用单个定义定义函数的常量和常规版本?(使用模板,自动,decltype等)
- 在内联程序集中定义函数和从 C++ 调用时出现问题
- 在 Metal 着色器代码中,如何定义函数的 in/out 参数变量?
- 声明和定义函数静态会产生"undefined reference to function_name()"
- 朋友定义函数的名称空间是什么
- 介子 对用户定义函数的未定义引用
- 如何使用 "using" 关键字定义函数原型/签名
- 在 C 结构中定义C++函数