gpt4 book ai didi

c++ - 仅包含会导致链接错误

转载 作者:行者123 更新时间:2023-12-02 17:19:16 26 4
gpt4 key购买 nike

简单地包含OpenCV header 会导致链接错误。这是为什么?

// test.cpp
#include <opencv2/opencv.hpp>

int foo();
int bar();

int main() {
}
如果我使用 g++ test.cpp编译文件,则会发生以下链接错误:
/tmp/ccugmQl4.o: In function `cv::String::~String()':
test.cpp:(.text._ZN2cv6StringD2Ev[_ZN2cv6StringD5Ev]+0x14): undefined reference to `cv::String::deallocate()'
/tmp/ccugmQl4.o: In function `cv::String::operator=(cv::String const&)':
test.cpp:(.text._ZN2cv6StringaSERKS0_[_ZN2cv6StringaSERKS0_]+0x28): undefined reference to `cv::String::deallocate()'
collect2: error: ld returned 1 exit status
如果我使用 g++ test.cpp -lopencv_core编译,则可以正常工作。

我的问题是:
在我看来,如果不使用,就不需要解析 undefined symbol ,例如 foobar函数。它们没有定义,但是 编译链接进程可以正常工作。
我也不使用任何OpenCV函数。为什么仅OpenCV函数存在链接错误?
header 中定义的哪些种类的内容会导致这种链接错误?

最佳答案

如果您稍微调整一下示例

// test.cpp

int foo();
int bar() {
foo();
}

int main() {
}
您会注意到它会停止工作,因为链接器将无法理解什么是foo();。
当您包含opencv header 时,会发生相同的事情-引用了已声明的函数,但由于您从未链接过opencv本身-链接器无法确定这些函数是什么以及在何处获取它们。

关于c++ - 仅包含<opencv2/opencv.hpp>会导致链接错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63029500/

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